ZeroMQ和WebSockets的区别

aamkag61  于 2023-06-23  发布在  其他
关注(0)|答案(3)|浏览(142)

我想知道ZeroMQ和WebSockets协议之间的区别。我知道WebSockets是为Web浏览器客户端设计的,但我假设它也可以用于服务器到服务器。而且,在这种情况下,我想知道使用WebSockets而不是ZeroMQ之类的东西来进行实时消息传递是否合适。具体来说,我担心的是可靠性和在临时网络故障时丢失的消息。

w1e3prcc

w1e3prcc1#

A:Real-Time-Messaging是一个不错的标签

您可能很快就会意识到,一旦进入Real-Time的领域,就没有理由花费时钟周期将任何消息 Package 到XHTML-Matrjoska-in-Another-Matrjoska-in-another-Matrjoska alike envelopes-inside-envelopes中以及相关的低效率。

实时难以实时操作,因此要花费/损失处理**taskUnit**所需的最小可实现时间。

虽然有人试图以类似的ML“性感”方式重新 Package ,但最终的性能只是下降,“超出”了实时领域,而不是在那里表现得更好。
这方面的一个很好的例子是一个与“quasi-IT-guru-crowd”努力相关的废话,该努力使金融市场的标准FIX协议“扩展”用于XHTML编码的有效负载,虽然高频交易研发中的精英们花费了大量的资金/时间/精力来研究如何减少与每个IP包线卸载相关的纳秒以及等待的真实的IP包的最快可能解Map/解码。time**data**-包含在prefixTag:value原始规范的极简设计中的元素。

A:主要是协议差异

虽然WebSockets专注于port:80 HTML/XHTML-类似于一些高级有效负载内容的 Package 和框架,但ZeroMQ却走向了相反的方向。它“隐藏”和“卸载”了传输上的任何低级细节的代码(因此通过INPROC/IPC/TCP/PGM/EPGM/UDP/VMCI/...传输类,无论是本地、云范围还是两者的混合)
WebSocket协议具有固定的客户端和服务器角色以及HTTP风格的握手。
WebSocket focus在UTF-8/CRLF内容格式化时完成,在一对**0×000xff**字节之间成帧,并建立在WebBrowsers解析此类缓冲消息的能力之上,浏览器被设计为能够做到这一点)。

ZeroMQ为设计人员提供了一个开放的架构,可以在构建块上构建,这些构建块被精心设计为以某种方式进行合作-是的,它们具有行为-设计用于一些更复杂的消息传递模式。这允许无限的上层抽象,建立在一组经过验证的构建块上-ZMQ.PUBLISHER只是向所有ZMQ.SUBSCRIBER-s发送消息,这些ZMQ.SUBSCRIBER-s收听并展示了他们各自的意愿来订阅一些正在发布的新闻。其他ZMQ原语有助于制作基于循环的负载均衡器,额外的步骤允许构建故障安全架构和类似的高级解决方案。

A:协议特性

当您询问协议的可靠性时,在协议级别有更重要的属性-组装/重新组装/分解开销,性能可扩展性,API到线访问延迟,线程安全以及在不断增长的工作负载级别下性能属性的放松。
虽然WebSocket port:80通信对任何非WebSocket入侵都是“开放的”,但ZeroMQ低级协议是为快速,高效,排他的ZMQ-2-ZMQ,对等握手而设计的,所有的设计工作都是从更高的抽象API级别构建的,从中可以添加基于应用程序的软信令,这可能会引入修复/补救活动,以便您请求的丢失消息问题不会对应用程序状态产生任何不利影响。

并发系统程序员

我还想从这个piece of in-depth insight from Martin SUSTRIK, a co-father of both ZeroMQ & its younger POSIX-compliant sister nanomsg中获得一些关于线程零拷贝零延迟内部特性的高级奖励

cygmwpex

cygmwpex2#

你的问题听起来像是“Apache和HTTP有什么区别”
WebSockets只是一个协议(类似于http),而ZeroMQ是协议和服务器,负责从接收到消息到使用消息的整个生命周期。

uurv41yg

uurv41yg3#

有一些有趣的区别。
ZeroMQ是严格的Actor模型。消息的传输是异步的。当端点之间存在连接时,ZeroMQ保证整个消息被传递,或者根本不传递(即没有部分)。作为Actor模型,消息的可能位置是1)在发送应用中,2)在传输中的某处,或3)在接收应用中。
看起来WebSockets实际上是一个http操作,上面有一些编码。这可能更类似于通信顺序进程。CSP是Actor模型的一个发展,但是发送的行为与接收消息的行为是同步的。这是一个“处决集合地”。假设使用了http,“发送方”肯定知道消息已经存放在接收方应用程序中,因为http会话完成了,并且假设这需要接收方应用程序在那里准备就绪并等待,首先设置了http服务器(警告-我从来没有使用过websockets,可能是http服务器和实际的服务器应用程序之间有一些隐藏的queing)。
与CSP的区别在于,消息只能在两个位置:1)在发送应用中,或2)在接收应用中。ZeroMQ没有模糊的“在路上”的位置。
和以往一样,不可能说什么是最好的,因为这取决于一个人的需要是什么。
CSP更适合严格的硬真实的应用程序,因为您不会通过将消息装入队列/ OS tcp缓冲区/ NIC内存/以太网交换机中来隐藏处理消息的延迟。然而,CSP对IP网络的使用效率较低,因为有更多的协议数据在底层网络上来回流动,以确认和关闭http传输会话。请注意,“真实的”并不一定意味着“快速”,但它确实意味着“有保证”。CSP系统可以在数学上被证明是正确的(Tony Hoare为它炮制了一个过程计算,实际上CSP的动机是易于数学分析),如果系统性问题被写入系统,它们保证每次都会发生(即。在测试中很容易发现问题)。
Actor模型可以更好地利用现有的任何通信资源,但不能被证明是正确的,并且可以隐藏讨厌的问题(如死锁),直到某个忙碌的一天,当网络有点慢。ZeroMQ不允许您从队列中回收消息,并且根据网络出现的问题,某些模式的发送消息确实会被丢弃(通过设计)。这可能是个问题,也可能不是。你不能证明Actor模型系统是正确的(除了一些不重要的情况),测试也不一定能揭示系统问题,比如活锁、死锁。
无论如何,可以在Actor Model系统中实现CSP机制(在ZeroMQ之上插入消息ack / nack协议),并且可以在CSP中实现Actor Model机制(具有出站消息的应用程序内消息队列)。

相关问题