我应该为pyzmq使用哪个协议?
我正在做一个项目,里面有一个客户端和服务器的模型,使用的是Python。我搭建了一个服务器,用来监控请求并发送数据。PYZMQ支持多种通信方式:tcp、udp、pgm、epgm、inproc和ipc。我一直在用tcp进行进程间通信,但对于如何通过互联网向服务器发送请求,我却不知道该用什么。我只需要一个可以放入的东西:
socket.bind(BIND_ADDRESS)
2 个回答
0
在互联网上,通常会用到TCP或UDP这两种协议。我不太确定pyzmq是否在传输协议的基础上提供了自己的消息送达保证。如果没有的话,TCP会确保所有消息按顺序送到,而UDP在网络拥堵时可能会丢失一些消息。
如果你不确定自己需要什么,TCP是最简单也是最安全的选择。
5
你有没有特别的原因不使用 ipc
或 inproc
来进行进程间通信呢?
除此之外,通常来说,你可以把 tcp
看作是通用的通信方式;虽然它不一定是最好的选择,但只要你有一个IP地址,它就能工作。
在选择传输方式时,你需要知道以下几点:
- PGM/EPGM 是多播传输方式——它的意思是你发送一条消息,这条消息会在最后一刻被拆分成多条消息,分别发送给每个接收者。除非你绝对确定需要这种方式,否则你其实不需要。
- IPC/Inproc 是用于进程间通信的……如果你是在同一个进程中的不同线程之间,或者在同一个逻辑主机上的不同进程之间进行通信,那么这些方式可能适合你。这样可以减少一些开销。如果你将来可能会添加新的逻辑主机,这种方式可能就不太合适了。
- Russle Borogove 很好地解释了 TCP 和 UDP 之间的区别。一般来说,你会想使用 TCP。只有在绝对速度比可靠性更重要的情况下,你才会使用 UDP。
我一直以为 ZMQ 不支持 UDP,所以如果有的话,可能是通过 pyzmq 绑定添加的。
另外,我看了你的图示——你可能想让服务器的 ZMQ 套接字使用 bind
,而客户端的 ZMQ 套接字使用 connect
……虽然有一些原因可能会反过来,但一般来说,服务器被认为是“可靠”的对等方,而客户端是“临时”的对等方,你希望“可靠”的对等方进行绑定,而“临时”的对等方进行连接。