我应该为pyzmq使用哪种协议?

时间:2014-06-04 01:26:37

标签: python tcp zeromq pyzmq

我正在开发一个项目,我在python中有一个客户端服务器模型。我设置了一个服务器来监控请求并发回数据。 PYZMQ支持:tcp,udp,pgm,epgm,inproc和ipc。我一直在使用tcp进行进程间通信,但不知道我应该使用什么来通过Internet向服务器发送请求。我只需要放入一些东西:

    socket.bind(BIND_ADDRESS)

DIAGRAM: Client Communicating over internet to server running a program

2 个答案:

答案 0 :(得分:3)

您没有使用ipcinproc进行进程间通信的任何特殊原因?

除此之外,一般来说,你可以考虑tcp通用传播者;它并不总是最好的选择,但无论如何(只要你真的拥有IP地址)它都会有效。

以下是您在传输之间做出选择时需要了解的内容:

  1. PGM / EPGM是多播传输 - 这个想法是你发送一条消息并将其作为单个消息传递,直到它被分成多个消息的最后一个可能的时刻,每个接收器一个消息。除非你绝对知道你需要这个,否则你不需要这个。
  2. IPC / Inproc用于进程间通信...如果您在同一进程中的不同线程之间或同一逻辑主机上的不同进程之间进行通信,则这些可能是合适的。您可以获得更少的开销。如果您可能添加新的逻辑主机,则可能不合适。
  3. Russle Borogove很好地列举了TCP和UDP之间的区别。通常,您会想要使用TCP。只有当绝对速度比可靠性更重要时,你才会使用UDP。
  4. 我的理解是,ZMQ不支持UDP,所以如果它存在,它可能是由pyzmq绑定添加的。

    另外,我看了一下你的图表 - 你可能希望服务器ZMQ套接字到bind,客户端ZMQ套接字到connect ...有一些你可能会改变这种情况的原因,但作为一般规则,服务器被认为是“可靠”对等体,客户端是“瞬态”对等体,你希望“可靠”对等体绑定,“瞬态”对等体连接

答案 1 :(得分:0)

通过互联网,TCP或UDP是通常的选择。我不知道pyzmq是否在传输协议之上有自己的传递保证。如果没有,TCP将保证所有消息的按顺序传送,而UDP可能会在网络拥塞时丢弃消息。

如果您不知道自己想要什么,TCP是最简单,最安全的选择。