Heroku worker dyno上的进程之间的TCP Socket通信

mak*_*dad 10 ruby sockets tcp heroku worker

我想知道如何在Heroku工作者dyno上的进程之间进行通信.

我们希望Resque工作者读取队列并将数据发送到在同一个dyno上运行的另一个进程."其他进程"是一种现成的软件,通常使用TCP套接字(端口xyz)来监听命令.它设置为在Resque工作程序启动之前作为后台进程运行.

但是,当我们尝试本地连接到该TCP套接字时,我们无处可去.

我们设置队列的Rake任务执行此操作:

task "resque:setup" do
  # First launch our listener process in the background
  `./some_process_that_listens_on_port_12345 &`

  # Now get our queue worker ready, set up Redis backing store
  port = 12345
  ENV['QUEUE'] = '*'  
  ENV['PORT'] = port.to_s
  Resque.redis = ENV['REDISTOGO_URL']

  # Start working from the queue
  WorkerClass.enqueue
end
Run Code Online (Sandbox Code Playgroud)

这样做 - 我们的侦听器进程运行,Resque尝试处理排队的任务.但是,Resque作业失败,因为它们无法连接localhost:12345(具体而言Errno::ECONNREFUSED).

可能,Heroku在同一个dyno上阻止TCP套接字通信.有没有解决的办法?

我尝试从情境中取出"代码"并在命令行上执行(在服务器进程声称它已正确绑定到12345之后):

nc localhost 12345 -w 1 </dev/null
Run Code Online (Sandbox Code Playgroud)

但这也没有联系.

我们目前正在调查更改客户端/服务器代码以便UNIXSocket在两侧使用而不是TCPSocket,但由于它是一个现成的软件,我们宁愿避免使用我们自己的分支.

BBJ*_*BJ3 5

使用消息队列 Heroku 附加组件...,

IronMQ用于 exsample