gpt4 book ai didi

ruby - Heroku worker dyno 进程间的 TCP Socket 通信

转载 作者:可可西里 更新时间:2023-11-01 02:30:30 24 4
gpt4 key购买 nike

我想知道如何在 Heroku worker dyno 上的进程之间进行通信。

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

但是,当我们尝试在本地连接到该 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 套接字通信。有解决办法吗?

我试图从这种情况中取出“代码”并在命令行上执行(在服务器进程声称它已正确绑定(bind)到 12345 之后):

nc localhost 12345 -w 1 </dev/null

但这也不连接。

我们目前正在研究更改客户端/服务器代码以在两侧使用 UNIXSocket 而不是 TCPSocket,但因为它是现成的软件,如果可能的话,我们宁愿避免自己的 fork 。

最佳答案

使用消息队列Heroku add-ons ...,

喜欢IronMQ对于示例

关于ruby - Heroku worker dyno 进程间的 TCP Socket 通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9322599/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com