1

HTTP-> IRCプロキシを構築しています。HTTPリクエストを介してメッセージを受信し、IRCサーバーに接続して、チャネル(チャットルーム)に投稿する必要があります。

これはすべてかなり簡単です。私が抱えている問題の1つは、IRCサーバーへの接続が永続的なソケットであり、理想的には妥当な期間開いたままにしておく必要があることです。これは、リクエストごとにソケットを開いたり閉じたりするHTTPリクエストとは異なります(常に真実であるとは限りません)。これは、同じIRCサーバー/ルーム宛てのメッセージを常に同じプロセス(IRCサーバーへの接続を保持しているプロセス)を介して送信する必要があることを意味します。

したがって、基本的にWebプロセスでHTTPリクエストを受信し、IRCサーバーへの接続が開いている特定のワーカープロセスを特定して、メッセージをそのプロセスにルーティングする必要があります。

IRCプロキシアプリ内のメッセージキューの複雑さを避けたいと思います。最初にHTTPリクエストを送信するメッセージキューがすでにその前にあるからです。

そのことを念頭に置いて、私の理想的なソリューションは、Webプロセスとワーカープロセス間でデータストアを共有し、ワーカープロセスに接続先のすべてのIRCサーバーのテーブルを維持させることです。WebプロセスがHTTPリクエストを受信すると、テーブルを検索して、必要なIRCサーバーに接続しているワーカーがすでに存在するかどうかを判断し、メッセージをそのサーバーに転送します。既存の接続がない場合は、効果的に機能します。ロードバランサーとして、メッセージを転送する適切なワーカーを選択して、IRCサーバーへの接続を確立して保持できるようにします。

これを行うには、ワーカープロセスがHTTPサーバーを起動し、Webプロセスからの要求をリッスンできる必要があります。Herokuでは、Webプロセスのみが公開されている「ルーティングメッシュ」に追加されることを知っています。これは問題ありません。知りたいのは、Herokusネットワーク内(「ルーティングメッシュ」)。

避けたいと言った通りでなければならない場合は、メッセージキューを使用します。

ありがとう!

4

0 に答える 0