基本经销商 - 路由器套接字无法正常工作

时间:2015-08-25 16:38:32

标签: ruby zeromq

我试图在ZeroMQ中实现基本的DEALER - ROUTER套接字。 我的问题有很多部分。

在此之前,这是我的示例脚本

DEALER SCRIPT

ROUTER SCRIPT

问题 -

首先,我的vanilla DEALER SCRIPT无法从SOCKET中读取消息。

其次,当我实现DEALER或ROUTER PATTERN时,是否必须传递IDENTITY(作为标题的一部分),即不能在没有任何IDENTITY的情况下发送消息。

换句话说,DEALER - ROUTER模式(可以在下面看到)可以共存并在它们之间传递消息而不在标题中发送身份信息。

DEALER WITHOUT ANY IDENTITY

ROUTER WITHOUT ANY IDENTITY

因为,如果没有身份,我也无法让它工作。

注意: - 目前图片中的Zeromq ruby​​库(ruby客户端)是ffi-rzmq

1 个答案:

答案 0 :(得分:0)

您的代码显示了很多关于ZMQ如何工作的误解,我建议您阅读the guide并按照Ruby示例来设置脚本。

以下是我看到的问题:

  1. 在您的DEALER脚本中,您明确接收到identity - 它永远不会将自己的身份作为消息的一部分,ZMQ会默默地将其删除,因为它不是消息数据,而是打算成为消息数据。 ROUTER套接字使用的“地址”。因此,您实际上已在您的identity变量中收到分隔符,将消息收到您的delimiter变量中,然后不会留下任何内容,而您的msg变量为空。如果你puts所有三个变量的值,你会看到它。
  2. 您的DEALER套接字中不需要ZMQ轮询器。轮询器旨在从多个套接字接收消息,您只使用一个套接字。我不知道它是否真的打算与一个插槽一起使用,但无论如何它都是不必要的额外复杂性,将其撕掉。 See here for a simple send/receive example from the guide(如果您只是将套接字类型更改为DEALER,请添加您的“详细信息” - 身份,地址,端口等 - 并省略发送,它应该适合您)
  3. 在第二个示例中,设置标识,ROUTER套接字不会将消息发送到任何连接的客户端 - 您始终需要发送客户端身份作为消息的第一帧。通常,您将收到来自客户端的消息,其中包含其身份,您将使用该身份发送消息。您只能在第一个示例中跳过它,因为您的脚本已经知道身份“client”