【问题标题】:Progress feedback in stateless HTTP session无状态 HTTP 会话中的进度反馈
【发布时间】:2010-07-30 07:18:27
【问题描述】:

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

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

我现在的问题是:

如果服务器上的方法需要更长的时间才能产生结果,则它们会提供进度信息。这些是短消息。如何回信给客户?

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

【问题讨论】:

    标签: delphi rest indy delphi-2006 indy10


    【解决方案1】:

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

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

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

    【讨论】:

    • 我需要使用 TIdHTTPServer,因为我正在实现 REST(带有 TIdHTTP 参数的 GET)。我很想使用 writebufferflush 之类的东西,但我不能让它工作 - 我总是在消息框中获得第一个 writeln,然后将其余部分丢弃。
    • 查看我的编辑,我的建议是在客户端使用 TIdTCPClientCustom 而不是 TIdHTTP,以完全控制服务器响应的处理
    猜你喜欢
    • 1970-01-01
    • 2015-05-26
    • 1970-01-01
    • 1970-01-01
    • 2018-01-25
    • 1970-01-01
    • 2011-03-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多