restful 服务器一个问题,看ChatGPT的威力
看看是否牛逼:

真不是写代码的料,也没有这样的天赋,仅仅玩玩而已。
问题:客户端边缘路由中一段js代码,使用get请求一个方法,把json数据送入数据库相关表。由于种种原因导致长连接,通过资源管理器可以看到TCP连接一直挂在那里。(该问题不知道是否是伪命题,请专业人员指导)
七搞八搞,依赖Chatgpt才(应该)搞定了,否则永远不可能,如果不是永远,那么就是非常非常遥远、遥远、遥远......。
上代码:
function TUsegear.UpdateAJson2DB4ZT(aJson: string): string; //提交Json数组到账套表
var
Task: ITask; //用于执行异步任务
TimeoutMs: Integer; //超时时间,单位:毫秒(默认 5000ms = 5s)
TaskCompletedFlag: Integer; // 确保 TInterlocked.Exchange 线程安全 任务完成标志(0 = 未完成,1 = 已完成),用于确保线程安全
TaskResult: string;// 最终返回的执行结果
TaskEvent: TEvent; //用于通知主线程任务完成,避免 Sleep(10); 造成的 CPU 轮询
begin
Result := 'Timeout';
TimeoutMs := 10000;
TaskCompletedFlag := 0; // 0 = False, 1 = True // 任务开始时标记为未完成
TaskResult := 'Timeout';
TaskEvent := TEvent.Create(nil, True, False, ''); //启动后台任务
Task := TTask.Run(procedure
var
LocalQuery: TFDQuery;
LocalConn: TFDConnection;
ja: TJSONArray;
jo: TJSONObject;
LocalResult, ZTName, myTable, aSQL: string;
begin
LocalResult := 'Unknown Error';
ja := nil;
LocalConn := TFDConnection.Create(nil);
LocalQuery := TFDQuery.Create(nil);
try
try
LocalConn.DriverName := FDConnection1.DriverName;
LocalConn.Params.Assign(FDConnection1.Params);
// **确保复制密码和数据库信息**
LocalConn.Params.Values['Password'] := FDConnection1.Params.Values['Password'];
LocalConn.Params.Values['User_Name'] := FDConnection1.Params.Values['User_Name'];
LocalConn.Params.Values['Database'] := FDConnection1.Params.Values['Database']; try
LocalConn.Connected := True; // **在任务线程里独立连接数据库**
except
on E: Exception do
begin
LocalResult := '线程数据库连接失败: - ' + E.Message;
if Var_Log then PostLog(llError,'线程数据库连接失败: -:'+e.Message);
Exit;
end;
end; // 解析 JSON
ja := TJSONObject.ParseJSONValue(TEncoding.ASCII.GetBytes(aJson), 0) as TJSONArray;
if not Assigned(ja) or (ja.Count = 0) then raise Exception.Create('Invalid or empty JSON array'); //获取账套名称 (zt) 和目标表名 (mytable)
jo := ja.Items[0] as TJSONObject;
ZTName := jo.GetValue<string>('zt'); try
LocalConn.Connected := False; // 先确保连接断开
LocalConn.ConnectionDefName := ZTName;
LocalConn.Connected := True;//链接指定账套
if Var_Log then PostLog(llHint,'线程账套数据库连接成功');
except
on E: Exception do
begin
if Var_Log then PostLog(llError, '线程账套数据库连接失败: ' + E.Message);
Exit;
end;
end; LocalQuery.Connection := LocalConn;
LocalQuery.CachedUpdates := True; myTable := jo.GetValue<string>('mytable');
//把 JSON 转换为数据集 (Dataset) 并提交数据
aSQL := 'SELECT * FROM ' + myTable + ' WHERE 1=2';
LocalQuery.Open(aSQL);
TConverter.New.JSON.Source(ja).ToDataSet(LocalQuery);
LocalQuery.ApplyUpdates(0);
LocalResult := 'OK';
except
on E: Exception do
begin
LocalResult := 'Error: ' + E.Message;
if Var_Log then PostLog(llError,LocalResult);
end;
end;
finally
if Assigned(ja) then FreeAndNil(ja);
FreeAndNil(LocalQuery);
FreeAndNil(LocalConn);
end; TThread.Synchronize(nil, procedure //线程安全更新
begin
if TInterlocked.Exchange(TaskCompletedFlag, 1) = 0 then
begin
TaskResult := LocalResult;
TaskEvent.SetEvent;
end;
end);
end); try //任务超时处理
if not Task.Wait(TimeoutMs) then
begin
Task.Cancel;
TaskEvent.SetEvent; // 让主线程立即返回
end;
except
on E: Exception do
begin
TaskResult := 'Error: Task.Wait failed - ' + E.Message;
end;
end; //彻底释放 Task
if Task.Status <> TTaskStatus.Completed then
begin
Task.Wait(1000); // 额外等待1秒,确保任务彻底结束
end; if TaskEvent.WaitFor(TimeoutMs) = wrTimeout then
begin
TaskResult := 'Error: Event timeout reached';
end; TaskEvent.Free;
Task := nil; // 彻底释放 Task,防止意外访问
Result := TaskResult; //主线程返回最终结果
end;


restful 服务器一个问题,看ChatGPT的威力的更多相关文章
- 从高处理解android与服务器交互(看懂了做开发就会非常的容易)
今天帮一个朋友改一个bug 他可以算是初学者吧 .我给他看了看代码,从代码和跟他聊天能明显的发现他对客户端与服务器交互 基本 不是很了解.所以我花了更多时间去给他讲客户端与服务器的关系.我觉得从这个高 ...
- XML的应用 ---- 从一个范例看xml数据、xsd验证、xslt样式
从一个范例看XML的应用 引言 如果你已经看了Asp.Net Ajax的两种基本开发模式 这篇文章,你可能很快会发现这样一个问题:在那篇文章的方式2中,客户端仅仅是发送了页面上一个文本框的内容到服务端 ...
- 一个故事看懂HTTPS
我是一个浏览器,每到夜深人静的时候,主人就打开我开始学习. 为了不让别人看到浏览记录,主人选择了"无痕模式". 但网络中总是有很多坏人,他们通过抓包截获我和服务器的通信,主人干了什 ...
- 另一个角度看元宇宙与RPA:人工世界、平行员工与RPA
另一个角度看元宇宙与RPA:人工世界.平行员工与RPA 从元宇宙到平行员工,人工世界推动的虚实分工利好RPA 机器人是铁打营盘人类是流水兵,未来元宇宙的虚实分工RPA机会巨大 文/王吉伟 元宇宙是平行 ...
- 三分钟搭建一个自己的 ChatGPT (从开发到上线)
原文链接:https://icloudnative.io/posts/build-chatgpt-web-using-laf/ OpenAI 已经公布了 ChatGPT 正式版 API,背后的新模型是 ...
- 免费1年服务器,部署个ChatGPT专属网页版
作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 白皮袄个免费1年服务器,部署个ChatGPT专属网页版! api.openai.com por ...
- 在云服务器上搭建个人版chatGPT及后端Spring Boot集成chat GPT
总结/朱季谦 本文分成两部分,包括[国内服务器上搭建chat GPT]和[后端Spring Boot集成chat GPT]. 无论是在[国内服务器上搭建chat GPT]和[后端Spring Boot ...
- 廖雪峰js教程笔记6 generator一个坑 看完python在回来填坑
generator(生成器)是ES6标准引入的新的数据类型.一个generator看上去像一个函数,但可以返回多次. ES6定义generator标准的哥们借鉴了Python的generator的概念 ...
- Spark小课堂Week7 从Spark中一个例子看面向对象设计
Spark小课堂Week7 从Spark中一个例子看面向对象设计 今天我们讨论了个问题,来设计一个Spark中的常用功能. 功能描述:数据源是一切处理的源头,这次要实现下加载数据源的方法load() ...
- zz:一个框架看懂优化算法之异同 SGD/AdaGrad/Adam
首先定义:待优化参数: ,目标函数: ,初始学习率 . 而后,开始进行迭代优化.在每个epoch : 计算目标函数关于当前参数的梯度: 根据历史梯度计算一阶动量和二阶动量:, 计算当前时刻的下降 ...
随机推荐
- C#客户端Json转DataTable
本文转自 https://blog.csdn.net/pinebud55/article/details/52240287 感谢pinebud55分享 之前我们有讨论过c#是如何处理json的,在我的 ...
- 同步工具-SeaTunnel使用
一.介绍 SeaTunnel 是一个非常好用.超高性能的分布式数据集成平台,架构于 Apache Spark 和 Apache Flink 之上,实现了海量数据的实时同步与转换.每天可以稳定高效地同步 ...
- 面试官:说说你项目中JWT的执行流程?
JWT 在目前的项目开发中使用到的频率是非常高的,因此它也是面试常问的一类问题,所以今天我们就来看看"项目中 JWT 的执行流程?"这个问题. 1.什么是 JWT? JWT(JSO ...
- 发那科FANUC机器人A06B-0652-B212电机维修基本流程
发那科FANUC机器人以其卓越的性能和可靠性赢得了广泛的认可.然而,就像其他任何机械设备一样,长时间的运行和复杂的工作环境都可能使伺服电机面临维修的需求.为了确保您的发那科FANUC机器人A06B-0 ...
- extern和static
extern和static extern和static两者之间是有一种相克的关系:用了extern的不能用static,用了static的不能用extern, extern是声明让别的文件中能够使用, ...
- 【技术美术】GPU渲染管线笔记
[技术美术]GPU 渲染管线笔记 基本术语 基元.图面: 网格中所使用的顶点数据布局,常见的如点.线.三角面等,特殊的甚至包括一些带邻近基元的基元类型. 参数语义 语义是附加到着色器输入或输出参数的字 ...
- autMan奥特曼机器人-内置Redis
autMan内置了redis服务,有的脚本运行需要redis支持 几个注意事项: 启用redis服务后要重启autMan生效,关闭一样的道理. 启用redis服务后会增加约200M的内存占用 多个au ...
- AngleSharp :在 C# 中轻松解析和操作 HTML/XML 文档
AngleSharp 是一个 C# 库,主要用于解析和操作 HTML 和 XML 文档,类似于浏览器的 DOM 操作.允许你在 C# 中使用类似浏览器的方式处理网页数据,进行网页抓取.数据提取和处理等 ...
- Flink学习(九) Sink到Kafka
package com.wyh.streamingApi.sink import java.util.Properties import org.apache.flink.api.common.ser ...
- 清华大学推出的5册免费的 DeepSeek 学习使用指南!
前言 在当今这个信息洪流.技术飞速迭代的时代,DeepSeek的横空出世极大地降低了普通人利用人工智能技术的门槛.然而,尽管机遇就在眼前,仍有不少朋友面对DeepSeek感到无从下手,不知如何利用它来 ...