我正在开发一个项目,其中有一个 python 客户端服务器模型。我设置了一个服务器来监视请求并发回数据。 PYZMQ 支持:tcp、udp、pgm、epgm、inproc 和 ipc。我一直在使用 tcp 进行进程间通信,但不知道应该使用什么通过互联网向服务器发送请求。我只需要放入一些东西:
socket.bind(BIND_ADDRESS)
DIAGRAM: Client Communicating over internet to server running a program
最佳答案
您不使用 ipc
或 inproc
进行进程间通信有什么特殊原因吗?
除此之外,一般情况下,您可以将 tcp
视为通用通信器;它并不总是最好的选择,但无论如何(只要您实际上有一个 IP 地址)它都会起作用。
以下是您在选择交通工具时需要了解的信息:
- PGM/EPGM 是多播传输 - 其想法是,您发送一条消息,它会作为一条消息进行传递,直到最后一刻,它将被分解为多条消息,每个消息对应一个接收者。除非您绝对知道您需要这个,否则您不需要这个。
- IPC/Inproc 用于进程间通信...如果您在同一进程中的不同线程之间或同一逻辑主机上的不同进程之间进行通信,那么这些可能是合适的。您可以获得更少的开销的好处。如果您可能添加新的逻辑主机,这可能不合适。
- Russle Borogove 很好地列举了 TCP 和 UDP 之间的区别。通常您会想要使用 TCP。只有当绝对速度比可靠性更重要时,您才会使用 UDP。
据我了解,ZMQ 不支持 UDP,因此如果存在,则可能是由 pyzmq 绑定(bind)添加的。
另外,我看了你的图表 - 你可能希望服务器 ZMQ 套接字绑定(bind)
,客户端 ZMQ 套接字连接
...有一些原因可以解释为什么您可能会逆转这种情况,但作为一般规则,服务器被认为是“可靠”对等点,而客户端是“ transient ”对等点,并且您希望“可靠”对等点绑定(bind), “瞬时”对等点连接。
关于python - pyzmq 应该使用哪种协议(protocol)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24027579/