【问题标题】:Which protocol should I use for pyzmq?我应该为 pyzmq 使用哪种协议?
【发布时间】:2014-06-04 01:26:37
【问题描述】:
【问题讨论】:
标签:
python
tcp
zeromq
pyzmq
【解决方案1】:
您没有使用ipc 或inproc 进行进程间通信的任何特殊原因?
除此之外,一般可以考虑tcp万能通讯器;它并不总是最好的选择,但无论如何(只要你有一个 IP 地址)它都会起作用。
以下是您在选择传输时需要了解的内容:
- PGM/EPGM 是多播传输 - 其理念是您发送一条消息,然后将其作为单个消息传递,直到最后可能的时刻将其分解为多个消息,每个接收者一个消息。除非你绝对知道你需要这个,否则你不需要这个。
- IPC/Inproc 用于进程间通信...如果您在同一进程中的不同线程之间进行通信,或者在同一逻辑主机上的不同进程之间进行通信,那么这些可能是合适的。您将获得更少开销的好处。如果您可能会添加新的逻辑主机,这可能是不合适的。
- Russle Borogove 很好地列举了 TCP 和 UDP 之间的区别。通常你会想要使用 TCP。只有当绝对速度比可靠性更重要时,您才会使用 UDP。
我一直认为 ZMQ 不支持 UDP,所以如果它存在,它可能是由 pyzmq 绑定添加的。
另外,我查看了您的图表 - 您可能希望服务器 ZMQ 套接字连接到 bind 和客户端 ZMQ 套接字连接到 connect...有一些原因您可能会反过来,但作为一般规则,服务器被认为是“可靠”对等方,客户端是“瞬态”对等方,您希望“可靠”对等方绑定,“瞬态”对等方连接。
【解决方案2】:
在 Internet 上,TCP 或 UDP 是通常的选择。我不知道 pyzmq 在传输协议之上是否有自己的交付保证。否则,TCP 将保证所有消息按顺序传递,而 UDP 可能会在网络拥塞时丢弃消息。
如果你不知道自己想要什么,TCP 是最简单、最安全的选择。