1

我正在构建一个 HTTP -> IRC 代理,它通过 HTTP 请求接收消息,然后应该连接到 IRC 服务器并将它们发布到频道(聊天室)。

这一切都相当简单,我遇到的一个问题是与 IRC 服务器的连接是一个持久套接字,理想情况下应该在一段合理的时间内保持打开状态 - 不像 HTTP 请求,每个请求都打开和关闭一个套接字(我知道并不总是正确的)。这意味着一条发往同一 IRC 服务器/房间的消息必须始终通过相同的进程(与 IRC 服务器保持连接的进程)发送。

所以我基本上需要在我的 Web 进程上接收 HTTP 请求,然后让他们找出哪个特定的工作进程与 IRC 服务器有开放连接,并将消息路由到该进程。

我宁愿避免 IRC 代理应用程序中消息队列的复杂性,因为我们已经有一个坐在它前面,首先向它发送 HTTP 请求。

考虑到这一点,我理想的解决方案是在 web 和工作进程之间有一个共享的数据存储,并让工作进程维护他们连接到的所有 IRC 服务器的表。当一个 Web 进程接收到一个 HTTP 请求时,它可以查找该表以确定是否已经有一个工作人员与所需的 IRC 服务器连接并将消息转发给该服务器,或者如果没有现有连接,它可以有效地采取行动作为负载平衡器,并选择一个合适的工作人员来转发消息,以便它可以建立并保持与 IRC 服务器的连接。

现在要做到这一点,它需要我的工作进程能够启动 HTTP 服务器并监听来自 Web 进程的请求。在 Heroku 上,我知道只有 web 进程被添加到面向公众的“路由网格”中,这很好,我想知道的是是否可以在 Herokus 网络内部的 web 和工作进程之间发送 HTTP 请求(在“路由网格”)。

如果必须的话,我会使用消息队列,正如我所说的那样,我想避免它。

谢谢!

4

0 回答 0