【问题标题】:Which protocol should I use for pyzmq?我应该为 pyzmq 使用哪种协议?
【发布时间】:2014-06-04 01:26:37
【问题描述】:

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

    socket.bind(BIND_ADDRESS)

DIAGRAM: Client Communicating over internet to server running a program

【问题讨论】:

  • 对于那些感兴趣的人,我找到了 SSH 解决方法。
  • 别让我们久等了!我想看看SSH解决方案。

标签: python tcp zeromq pyzmq


【解决方案1】:

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

除此之外,一般可以考虑tcp万能通讯器;它并不总是最好的选择,但无论如何(只要你有一个 IP 地址)它都会起作用。

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

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

我一直认为 ZMQ 不支持 UDP,所以如果它存在,它可能是由 pyzmq 绑定添加的。

另外,我查看了您的图表 - 您可能希望服务器 ZMQ 套接字连接到 bind 和客户端 ZMQ 套接字连接到 connect...有一些原因您可能会反过来,但作为一般规则,服务器被认为是“可靠”对等方,客户端是“瞬态”对等方,您希望“可靠”对等方绑定,“瞬态”对等方连接。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-27
      • 2013-06-11
      • 1970-01-01
      • 1970-01-01
      • 2013-05-20
      • 2014-04-14
      • 2013-04-07
      • 1970-01-01
      相关资源
      最近更新 更多