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,但由于它是一个现成的软件,我们宁愿避免使用我们自己的分支.
| 归档时间: |
|
| 查看次数: |
3039 次 |
| 最近记录: |