无状态HTTP会话中的进度反馈

时间:2010-07-30 07:18:28

标签: delphi rest indy delphi-2006 indy10

我需要编写一个无状态服务器来执行远程方法。客户端使用带有JSON参数的REST来传递方法名称及其参数。在为结果提供服务后,会话将关闭。我必须使用Indy10,TCP / IP作为协议,因此请查看使用IdHTTPServer。

大型结果集被Indy10分块并分批发送给客户端。

我现在的问题是:

如果生成结果需要更长时间,服务器上的方法会提供进度信息。这些都是短信。我怎样才能回复客户?

到目前为止,我在服务器上使用了writeflush,但客户端在返回完整结果集之前等待请求结束,包括进度信息。如何在客户端显示/处理此类进度信息并保持连接打开以接收有关同一请求的更多数据?

1 个答案:

答案 0 :(得分:1)

在客户端而不是常规HTTP客户端组件TIdHTTP上,您可以在单元IdTCPClient中使用Indy类TIdTCPClientCustom来发送请求并处理响应。

此类可以完全控制服务器响应的处理。我使用TIdTelnet类作为实现消息代理消息传递协议的客户端的起点,并发现它对于文本和二进制数据都是稳定可靠的。

在接收线程中,传入的数据可以读取到分隔符并解析为块(用于进度信息)并立即处理。