在TCP必须尝试重新传输消息的情况下,我遇到了解哪些套接字类型受到负面影响的问题。
我们有一个分布式系统,它使用inprocess的组合……
首先,唯一可以进行重传的传输是实际物理网络上的TCP。然后可能不在局域网上,因为以太网数据包不太可能在局域网中丢失。
计算机内部的TCP,特别是IPC,INPROC等,每次都会保证第一次传送数据。没有重传机制。
如果套接字使用的其中一个传输确实因传输错误而出现延迟,那么这将减慢速度。在通过套接字使用的所有传输传播之前,ZMQ不能将消息视为“已发送”。 “已发送”的外部可见性是出站消息队列已从高水位线移开1。
任何一条消息都可能通过IPC而不是TCP到达,并且消息2可能在消息1通过TCP到达之前通过IPC到达。但是如果你依赖于消息定时/相对顺序,你不应该首先使用ZMQ;它是演员模型,而不是CSP。
编辑弗兰克
Actor和CSP之间的区别在于前者是异步的,后者是同步的。因此,对于Actor模型,发送方没有关于接收方何时实际获得消息的信息。对于CSP,发送/接收是执行集合 - 仅在接收完成时发送完成。
这非常有用。如果在你的系统中,A指示C之前(在时间上,而不仅仅是在A的代码流中)指示B,那么你可以用CSP(但不是Actor模型)来做这件事是没有意义的。那是因为当A发送给B时,B在A发送完成之前收到消息,释放A然后发送给C.
不出所料,它是从CSP中受益的实时系统。
因此,在ZMQ中考虑ZMQ的Actor模型,混合使用TCP,IPC和INPROC传输。通过TCP发送的消息很可能比通过INPROC发送的消息晚得多,即使它们是先发送的。