将ZeroMQ事件流回客户端

时间:2014-06-03 00:49:31

标签: sockets zeromq

我有一个用例,我希望有一个ZeroMQ请求/回复套接字'流'返回结果,这是否可能使用MultiPart消息(即回复套接字在HasMore = false之前将帧流回来?)或我是接近这个错误?

情况:

1)客户端对某些记录进行查询(Request)

2)服务器查找数据库中的结果,并以当前大量记录(回复)分成帧进行响应

3)服务器必须等到发送最终帧之前生成服务器端事件(HasMore = false)

4)客户端在生成最终事件并且HasMore = false之前不会获得前面的帧

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

据我了解你的目标,听起来你所拥有的将按你期望的方式工作。 See here for more discussion on message frames。重点:

  • 如您所说,所有帧都将一次发送到客户端,它们将存储在服务器上,直到HasMore设置为false
  • 要记住一件重要的事情,如果它是一个真正大量的数据,你必须能够将整个数据集放入内存中,因为它将存储在你的服务器内存中,直到包含所有帧的整个消息为止完成后,它将在客户端处理之前被收到内存中。

我主要假设你要找的是一种在发送之前迭代建立消息的方法吗?或许也可以迭代地处理客户端上的数据?此外,您可以保证不会丢失中间的部分数据,您可以获得整个消息或丢失整个消息(而不是将每个帧作为单独的消息发送)。这是框架的主要用例之一,所以你做得很好。

我唯一反对的是使用“流”这个词,因为这意味着数据在服务器上处理时会不断地发送给客户端,这显然不是你想要做的事情( ZMQ消息帧也不可能。)