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 : 计算目标函数关于当前参数的梯度: 根据历史梯度计算一阶动量和二阶动量:, 计算当前时刻的下降 ...
随机推荐
- Java开发常用工具链接-copy
Java开发常用工具链接这里汇总了下Java开发过程中常用的一些工具,与一些自动化生成工具. 1. Spring相关工具通过Sql生成Spring相关的项目. Sql生成SpringBoot项目通过M ...
- w3cschool-R语言 教程
https://www.w3cschool.cn/r/ R语言教程 R语言是用于统计分析,图形表示和报告的编程语言和软件环境. R语言由Ross Ihaka和Robert Gentleman在新西兰奥 ...
- CRT优化RSA
转载:利用中国剩余定理加速 RSA RSA 作为世界上使用最为流行的公钥密码算法,被广泛应用在数据加密和数字签名上. 为了提高加密和签名验证的效率,一般会将RSA的加密指数(一般是公钥位数)设置的较小 ...
- MySQL数据定义语言
原文链接:https://blog.liuzijian.com/post/83cdb010-fa97-e8ff-5b28-22da08e739e9.html 1.库操作 1.1 创建数据库 CREAT ...
- Dotnet程序的内存与垃圾回收
都知道程序运行时的变量是放在内存里的,从我们学c++ 就知道有析构函数 malloc,还有学c#的时候天天 什么垃圾回收 GC 像背八股文样的 ,但是这个内存究竟能分配多少 没有人想过吧 ,不论做什 ...
- 无耳科技 Solon v3.0.7 发布(2025农历新年版)
Solon 框架! Solon 框架由杭州无耳科技有限公司(下属 Noear 团队)开发并开源.是新一代,面向全场景的 Java 企业级应用开发框架.从零开始构建(非 java-ee 架构),有灵活的 ...
- 使用MTR网络诊断
安装 MTR Ubuntu: apt update apt upgrade apt install mtr-tiny CentOS: yum update yum install mtr 使用 MTR ...
- 解读 DeepSeek-R1 论文 - 通俗易懂版
引言:让 AI 学会"思考"的新突破 在近年来的人工智能浪潮中,大型语言模型(LLM)如 ChatGPT 已经能回答各种问题,但它们在复杂推理方面仍有不足.所谓复杂推理,比如解决奥 ...
- q-analog 学习笔记(待整修)
联考题考这个不会就来学了 首先给出对其的定义. 对于一个对象 \(u\),构造关于 \(q\) 的某表达式 \(f(q)\),使得: \[\lim_{q\to 1}f(q)=u \] 然而这个可能没有 ...
- RabbitMQ(八)——消息确认
RabbitMQ系列 RabbitMQ(一)--简介 RabbitMQ(二)--模式类型 RabbitMQ(三)--简单模式 RabbitMQ(四)--工作队列模式 RabbitMQ(五)--发布订阅 ...