我想知道 ZeroMQ
和 WebSockets
协议之间的差异。< / p>
我知道WebSockets
是专为网络浏览器客户端设计的,但我认为它也可以用于服务器到服务器。
而且,在这种情况下,我想知道使用WebSockets
而不是ZeroMQ
之类的其他内容对于实时消息是否有用。
具体而言,我担心在发生临时网络故障时可靠性和缺少消息。
答案 0 :(得分:31)
您可能很快就会意识到,一旦进入实时领域,就没有理由将时钟周期用于将任何消息包装到XHTML-Matrjoska-in-Another-Matrjoska中-inside-another-Matrjoska类似信封 - 内部信封和相关的低效率。
实时难以实时运营,因此花费/损失处理 taskUnit
所需的最短时间。
虽然有尝试以类似的* ML - “性感”方式重新包装内容,但最终的性能只会降低,在实时区域的“外部”,而不是任何在那里表现更好的重要帮助。
一个非常好的例子是与“准IT-guru-crowd ”相关的废话,这些努力使得金融市场的标准FIX协议“扩展”用于XHTML编码的有效载荷,而高频交易R&amp; D在高频交易研发方面的努力花费了巨大的资金/时间/精力,如何减少与每个IP数据包线卸载相关的纳秒。在data
原始规范的简约设计中,对等待的实时 prefixTag:value
元素进行最快可能的解映射/解码。
虽然WebSockets
专注于端口:80 HTML / XHTML类似包装和构建一些高级有效负载内容,但 ZeroMQ
正朝着相反的方向发展。它“隐藏”&amp;从传输中的任何低级详细信息“卸载”代码(因此透明地通过INPROC
/ IPC
/ TCP
/ PGM
/ EPGM
提供服务运输类,无论是本地的,云端的还是两者兼而有之)
WebSocket
协议具有固定的客户端和服务器角色以及HTTP样式的握手。
WebSocket
焦点以UTF-8 / CRLF内容格式完成,在一对 0×00
&amp; 0xff
字节,并建立在WebBrowsers解析此类缓冲消息的能力之上,浏览器设计为能够这样做。
ZeroMQ
为设计师提供了一个开放式架构,以构建基础为基础,并以某些方式进行合作 - 是的,他们有行为 - - 该设计用于一些更复杂的消息传递模式。这允许无限制的上层抽象,构建在一组经过验证的构建块上 - ZMQ.PUBLISHER
只是向所有ZMQ.SUBSCRIBER
- s发送消息,这些消息可以听取并证明了他们各自的订阅意愿一些新闻正在发布。其他ZMQ原语有助于制作基于循环的负载均衡器,其他步骤可以构建故障安全体系结构和类似的高级解决方案。
当您询问协议的可靠性时,协议级别还有更重要的属性 - 汇编/重组/分解开销,性能可扩展性,API到线路访问延迟,线程安全和性能放松工作量不断增加的属性。
虽然WebSocket
端口:80通信对任何非WebSocket
入侵“开放”,ZeroMQ
低级协议专为快速,高效,独有的ZMQ-2-ZMQ而设计,同行握手和所有设计工作都是从更高的抽象API级别构建的,可以从中添加基于应用程序的软信令,这可能会引入修复/补救活动,以便您所请求的缺失消息问题不会对应用程序状态造成任何不利影响。
还希望在线程和零拷贝&amp;来自此piece of indepth insight from Martin SUSTRIK, a co-father of both ZeroMQ
& it's a bit younger POSIX-compliant sister nanomsg
答案 1 :(得分:1)
您的问题听起来像“Apache和HTTP之间有什么区别”
WebSockets只是一个协议(类似于http),而ZeroMQ是协议和服务器,它负责从收到消息到消费之前消息的生命周期。