我有一个应用程序需要定期发送其当前状态的快照,当前状态将由大约 500,000 条 64 字节消息表示。我一直难以使用 ZMQ 快速可靠地发送和接收这么多消息。
我目前一直在通过 tcp 使用 PUB/SUB 来执行此操作,但我并不热衷于模式或协议,只要它能完成工作。在我的实验中,我专注于处理发送和接收高水位标记、发送和接收缓冲区设置,并在发送循环中添加一些睡眠以尝试减慢它的速度。使用对我来说似乎相当慷慨的设置(500K HWM,10MB 缓冲区)并且仅使用环回连接,消息仍然无法始终如一地接收。
我对这些或其他调整参数的适当设置感兴趣,更广泛地对如何推断各种设置将产生的影响感兴趣。
一些可能有助于提供适当答案的进一步细节:
分布是一对多的。预计收件人人数约为 20 人。
每条消息代表一组关于不同金融工具的信息,所有这些信息都是同时观察到的。在我看来,既可以将它们组合成一个大消息(所有消息的集合在逻辑上构成一个完整的快照),也可以将它们分开(客户可能只对某些工具感兴趣,我认为这会有所帮助更容易过滤掉它们)。
消息的预期频率基本上不快于每 20 毫秒,也不慢于 5 秒。我实际登陆的位置可能会受到性能考虑的影响(即,我的服务器实际上可以多快将消息抽出,以及什么样的数据速率会证明对客户端来说是压倒性的)。