加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 22:16:32 所属栏目:百科 来源:网络整理
导读:我想知道如何在Heroku工人动力学之间进行交流. 我们希望Resque工作人员读取一个队列并将数据发送到在同一个dyno上运行的另一个进程. “其他过程”是通常使用TCP套接字(端口xyz)监听命令的现成软件.它被设置为在Resque工作者启动之前作为后台进程运行. 但是,
我想知道如何在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.

解决方法

你有没有尝试过Fifo?

http://www.gnu.org/software/libc/manual/html_node/FIFO-Special-Files.html#FIFO-Special-Files

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读