1

そこで、ユーザーが別のルートにアクセスして、そのチャネルのみにサブスクライブできるように、em-websocket(または場合によってはGoliath )をセットアップしようとしています。たとえば、次のようになります。

example.com/channel_1

そこで開いているブラウザは、に公開されたメッセージのみを受信しますchannel_1。実際、その時点までは、パラメータを使用するために解決するこのようなルートである必要はありません。だから私はAMQPを使用していて、直接交換とルーティングキーの概念があります。WebSocketの場合と類似したものはありますか?

Goliathサーバーは機能していますが、問題は、共有エンドポイントを使用しているため、WebSocket接続で開いているすべてのブラウザーが同じメッセージを受信して​​いると思うことです。これが私が行っていることです。

channel.queue(params['channel'], :auto_delete => true).subscribe do |payload|
  config['channel'].push(payload)
end

したがって、この例ではAMQPを使用していますが、これは引き続き使用したいのですが、問題は、各クライアントが再インスタンス化EM::Channel.newされ、メッセージがそのチャネルにプッシュされることです。複数のクライアントがどのように存在するかがわかりません。さまざまなチャネルにサブスクライブしました。

これを理解したり、より適切なデザインパターンに導いたりするのに役立ちます。

4

1 に答える 1

3

チャネルが事前定義されている場合は、各チャネルのサーバーの構成ファイルでEM :: Channel.newを実行するだけで、クライアントは適切なチャネルを介してメッセージを送受信します。

チャネルがユーザーによって定義されている場合は、チャネルを格納するハッシュ(または何か)を構成に設定する必要があります。クライアントが接続するときに、構成ハッシュをチェックして、チャネルが存在するかどうかを確認します。 t、EM ::Channel.newitそして続行します。存在する場合は、既存のチャネルを使用します。

2番目のケースでは、すべてのクライアントがなくなったときにチャネルをシャットダウンすることに対処するために、クライアントの切断時にいくつかのロジックを実行する必要があります。そうしないと、メモリリークが発生します。

于 2012-09-07T05:34:04.493 に答える