6

私は、複数のユーザーがさまざまな(共有の)プロジェクトで共同作業できるコラボレーションWebアプリケーションを作成しようとしています。これまで私はJavaScriptクライアントと1つのローカルjWebSocketサーバを持っています。私は複数のjWebSocketサーバの代わりにAWS IoTを使用することができますWebSocketとAWSを使用したWebアプリケーションの構築

オプション1

:展開時、スケーラブルなままに

、私は2つの選択肢を考えました。プロジェクトの変更を簡単に公開できます。公開するだけで済みます。 /project/{project-id}。しかし、従来の要求/応答メカニズムはどのように機能しますか?

Sketch of option 1

問題:要求を処理 EC2インスタンスは、別個のトピック(例えば/server/1)に発行することによって到達可能であろう。しかし、JSクライアントがAWS IoTに接続するとき、リクエストを送信するEC2インスタンスはわかりません。どのようにして各クライアントをインスタンス/トピックに割り当てることができますか?


オプションAWS Application Load Balancerの背後にある複数のEC2インスタンス上の2台の

実行jWebSocketサーバ。バランサは各クライアントをサーバに割り当てるだけで、従来のリクエスト - レスポンス・フローは問題にはなりません。しかし、変化を推進するのはどうですか?

Sketch of option 2

問題:各サーバが接続されたクライアントの独自のセットを持っているので、それは別のサーバーに接続しているクライアントに変更をプッシュすることはできません。


は、ずさんな解決策のように思えるからイベントを受信すると、AWSのIoTへのリクエストを送信するためにjWebSocketをミキシング

  • 備考。
  • 特定のプロジェクトへのサブスクリプションを許可または拒否するために、プログラムごとにCognito IDごとにIoTポリシーを適合させることができます。
  • ラムダによって導入されたhigh latencyのため、AWSラムダを使用してサーバーを放棄することは選択できません(異なる経験をした場合は、共有してください)。

関連記事

IoT request response protocol

任意のためのおかげで、あなたがこの問題で私を与えることができると思いました。

+0

私はElastic Beanstalk(それをサポートするために少し変更されたnginx.conf)上でwebsocketsアプリケーションを実行し、同様の問題が展開に及んだ。 WebSocketの永続的な性質のため、クラスタ化されたakkaインスタンスを使用してメッセージを公開しました。デプロイメントでは、再接続を指示するメッセージをJSクライアントに送ります。私たちが完璧ではなかったので、あなたが思いつく解決策に非常に興味があります。 –

+0

EBSとAkkaを注目してくれてありがとう(どちらも知らなかった)。あなたはあなたが終わったアーキテクチャをスケッチすることができますか? **すべての**クライアント(別のサーバーに接続されている場合でも)に公開できる一方で、要求 - 応答方法で作業できましたか? –

+0

サイドノート:Elastic Beanstalkは実際には「EB」です。 EBSはElastic Block Storeの頭字語です。 –

答えて

0

私はそれを持っています。 this questionの最初の提案は正しい方向に私を指摘しました。このソリューションにより、すべてのクライアントは、特定のトピックに登録することなく、最初に接続したサーバーに直接WebSocket接続を維持できます。

Servers push messages for unknown clients to the server in charge.

次のように動作します:

  1. クライアントがサーバーに接続すると、サーバーはそのクライアントにメッセージを送信する必要がある場合は、サーバーがクライアントのチャンネル
  2. に加入します接続されていない場合は、そのメッセージをクライアントのチャネルに公開します
  3. (推測します)チャネルに登録されているサーバーは、最初のサーバーの代わりにメッセージを処理できます

図の「プッシャー」はthis SaaSを表していますが、勿論他のメッセージングサービスに置き換えることもできます。

関連する問題