ruby – TCP插槽在Heroku工作人员的进程之间进行通信

前端之家收集整理的这篇文章主要介绍了ruby – TCP插槽在Heroku工作人员的进程之间进行通信前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想知道如何在Heroku工人动力学之间进行交流.

我们希望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

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

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

我试图把“代码”从这个情况中拿走,只是在命令行执行(在服务器进程声称它正确绑定到12345之后):

nc localhost 12345 -w 1 </dev/null

但是这也不会连接.

我们正在调查更改客户端/服务器代码以使用双方的UNIXSocket而不是TCPSocket,但是由于它是一个现成的软件,所以我们宁可避免使用自己的fork.

解决方法

猜你在找的Ruby相关文章