CoffeeScript ZMQ Pub不发送消息

时间:2014-06-17 15:44:31

标签: node.js amazon-ec2 coffeescript zeromq publish-subscribe

相同的pub-sub代码适用于本地计算机(Linux zephyr 3.13.0-27-generic #50-Ubuntu SMP Thu May 15 18:08:16 UTC 2014 i686 i686 i686 GNU/Linux).

然而,在EC2机器(Linux <host> 3.2.0-60-virtual #91-Ubuntu SMP Wed Feb 19 04:13:28 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux)上它失败了。 安全组设置为允许19019端口的所有端口,以及从0开始的所有TCP端口。 我尝试在NodeJS ZMQ模块中添加打印件,并且能够在我将其添加到flush函数时获取我发送的数据。 还有什么可能是问题?

我尝试在端口19019上使用tcpflow监听酒吧流量,但它没有用。我怎么能听这个流量?

sudo tcpflow -i eth0 port 19019sudo tcpflow -i lo port 19019

两者都没有用。有没有可以调试它的工具?

Pub.coffee

zmq = require 'zmq'
dpush_socket = zmq.socket 'pub'
dpush_socket.bind 'tcp://127.0.0.1:19019', (err) ->
  if not err?
    console.log "Bind successful"

dpush_socket.send 'pid' + ' req ' + req.query.pid

Sub.coffee

zmq = require "zmq"

endPoint = "tcp://0.0.0.0:19019"

sub = zmq.socket "sub"
sub.identity = 'worker' + process.pid;
sub.connect endPoint
console.log "worker connected!"

sub.subscribe('')

sub.on "message", (msg) ->
  console.log(sub.identity + 'got ' + msg.toString())

3 个答案:

答案 0 :(得分:0)

运输类应该在相同的IP上相互见面:PORT#

<强>子 .coffee

zmq = require "zmq"
#                                    # rather set URL, where PUB .bind() listens
endPoint = "tcp://127.0.0.1:19019"   # endPoint = "tcp://0.0.0.0:19019"

答案 1 :(得分:0)

部分答案可能是user3666197所指出的:你需要在同一个IP上绑定和连接。我不确定您对0.0.0.0地址的意图,除非您发现网络堆栈的某个未记录的角落支持此行为,否则它甚至不应该在您的本地计算机上工作。

另一个原因是你想要在你的回调中包含你的send调用,或者可能想要使用bindSync来确保在你尝试发送任何内容之前绑定套接字。可能发生的情况是套接字正在丢弃您发送的消息,因为套接字在您到达呼叫时尚未完成绑定。不同的机器之间可能会有所不同。

答案 2 :(得分:0)

问题是我使用了一个nodejs集群模块,并且在每个工作中都创建了一个zmq pub套接字,它绑定在同一个端口上,这会混淆问题。在我的本地机器上,它是一个单独的工人产卵。