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

标签 ruby sockets tcp heroku worker

我想知道如何在 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/

相关文章:

c# - TCP 重置后随机 "An existing connection was forcibly closed by the remote host."

C# TCP 在同一本地端口上监听和连接

ruby - 如果我在 jruby 而不是 ruby​​ 中,为什么我的加密模块会返回不同的值

ruby - Rails 应用程序中类(class)的位置

ruby-on-rails - 带有 :onchange and a :with 的 rails 2.1.2 collection_select

ruby - 一行中的多个就地替换

c - 实现确认包

sockets - socket.io动态发送和接收消息

c - 从 C 中的套接字读取给出奇怪的输出

C 套接字 - 连续读/写,会发生什么?