Chapter 2 - Sockets and Patterns【选译,哈哈】 Part 3 Messags Partterns
Handling Multiple Sockets
如果我们想同时从多个端点读取数据,该怎么办? 最简单的方法是将一个套接字连接到所有端点,并让ZeroMQ为我们完成扇入操作。如果远程端点处于相同的模式,这是合法的,但将PULL套接字连接到PUB端点则是错误的。
要想立即从多个套接字中读取数据,可以使用zmq_poll()。一个更好的方法可能是将zmq_poll()封装在一个框架中,使其成为一个出色的事件驱动的反应器,但这比我们想在这里讨论的工作多得多。
Multipart Messages
What we’ll learn now is simply how to blindly and safely read and write multipart messages in any application (such as a proxy) that needs to forward messages without inspecting them.
我们现在要学习的只是在需要转发消息而不检查消息的任何应用程序(如代理)中,如何盲目且安全地读写多部分消息。
当您处理多部分消息时,每个部分都是一个zmq_msg。例如,如果您正在发送一个包含五个部分的消息,那么您必须构造、发送和销毁五个zmq_msg。您可以提前完成这一操作(并将zmq_msg存储在数组或其他结构中),或者在发送时逐个执行。
关于multipart messages需要了解的一些事情:
当您发送一个多部分消息时,当您发送最终部分时,第一部分(以及后面的所有部分)实际上只在线路上发送。
如果您正在使用zmq_poll(),那么当您收到消息的第一部分时,其余的部分也已经到达。
您将收到消息的所有部分,或者根本没有。
消息的每个部分都是一个单独的zmq_msg。
无论是否检查more属性,您都将收到消息的所有部分。
在发送时,ZeroMQ将消息帧在内存中排队,直到最后一个消息帧被接收,然后将它们全部发送出去。
没有办法取消部分发送的消息,除非关闭套接字。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义