我正在创建一个客户端服务器应用程序来连续流式传输图像,以像视频流式传输应用程序一样工作。
客户端应用程序有一个计时器,每 300 毫秒计时一次,以向服务器发送请求,服务器回复图像。
实现工作正常,但一段时间后(〜5分钟或更长时间后)两个应用程序都冻结而没有任何错误消息(但我很少收到消息说系统资源不足)
之前情况更糟(大约 15 秒后冻结),但我改变了idtcpserver1.terminatewaittime to 10 (from 5000 defalt)
现在它发生在 5 分钟后。
我不明白为什么会发生错误,但我很确定使用基于计时器的请求并不好。
我可以将 tcpserver 转换为不可靠的无连接协议以使其更快并减少请求压力。
但我不想使用 UDP,因为它无法检测到损坏错误(但我不需要更正,我只想知道是否有任何错误(忽略整个图像))
procedure server.IdTCPServer1Execute(AContext: TIdContext);
begin
LLine := AContext.Connection.IOHandler.ReadLn();
AContext.Connection.IOHandler.Write(ast, 0, true);
end;
procedure client.timertick(Sender: TObject);
begin
IdTCPClient1.IOHandler.WriteLn(Edit1.Text);
LLine := TMemoryStream.Create;
IdTCPClient1.IOHandler.ReadStream(LLine, -1, false);
end;
仅提供与 Indy 相关的源代码,其他源代码被保留
=============== 在 Remy Lebeau 之后更新 - TeamB 和 Arnaud Bouchez 回答 ===========
感谢冻结是由于在某些情况下无法访问图像造成的。他们提到的工具帮助我找到了问题
但是主要问题还是没有解决
我可以将 tcpserver 转换为不可靠的无连接协议以使其更快并减少请求压力。