web-dev-qa-db-ja.com

多数の同時メッセージ用の非同期socket.io

現在、一般的なビュー/ページで次のように動作するWebアプリケーションがあります。

  • 前面には100以上の「プレビュー」を表示する必要があります(base64画像の形式で)
  • この各プレビューは、フロントが要求したときにバックエンドによってオンデマンドで作成されます
  • すべてのプレビューが読み込まれるまで、8つの標準ajaxリクエストのプールがキューで実行されます

これを写真で説明しましょう:

Initial loading

時々、ユーザーはプレビューのいくつかを変更する何かをします、そしてそれら(そしてそれらだけ)はフロントによって再び要求されなければなりません。この場合、次のようになります。

Modified previews loading

現時点では、100以上のプレビューが最初に読み込まれるのを待つのに長い時間(30〜50秒)かかる可能性があり、これは非常に面倒です。

実際の質問に入る前に、いくつかの点を述べさせてください:

  • 各プレビューは他から完全に独立しています
  • 各プレビューは、バックエンドによってほぼ瞬時に作成できます
  • 各プレビューのbase64ペイロードの重量はほとんどありません(いくつかのkb
  • http接続の確立には、実際にはほとんどの時間がかかります
  • もちろん、同時に機能できるajaxリクエストは約8つまでです。
  • 8つのリクエストの処理中にユーザーが別のビューに移動すると、ブラウザはajaxキューに空きがあるのを待ってから、新しいビューから要素を読み込みます。これは非常に煩わしいことです(新しいビューは空のままになる可能性があります)。何かが起こる前に何秒間も)
  • 1つの大きなリクエストですべてのプレビューをバルクすることができません、そしてはるかに速くロードされる可能性のある他のプレビューにペナルティを課したくありません

だから、私の質問は:

  • socketを使用すると、接続時間が劇的に改善されるため、初期読み込み時やプレビューで変更があった場合にアプリの応答性が大幅に向上しますか?

  • このsocketで交換されるメッセージは非同期になる可能性があるため、100以上のプレビューを同時に要求した場合、それらはすべて非常に迅速にロードされますか?もしそうなら、ソケットには最大数の同時メッセージがありますか?

  • allフロントが現在待機している同時メッセージは、ユーザーがこのビューを終了して別のビューにアクセスした場合、即座にドロップできますか?または、同時メッセージの制限が事実上ない場合でも問題はありませんか?

前面にEmberJSを使用し、背面にEmberDataFlaskを使用しています。

3
Jivan

ソケットを使用すると接続時間が劇的に改善されるので、最初の読み込み時やプレビューでの変更の場合にアプリの応答性が大幅に向上しますか?

はい。ソケットはこのために特別に設計されています。

このソケットで交換されるメッセージは非同期なので、同時に100以上のプレビューを要求した場合、それらはすべて非常に迅速にロードされますか?

デザインはおそらく次の形式を取ります:メッセージを受信し、タイルを更新します。部分的または完全なページのリロードを必要としないという意味で非同期です。

ソケットには最大数の同時メッセージがありますか?

1つは、私の知る限り。ただし、シリアルメッセージは非常に迅速に受信できます。

フロントが現在待機しているすべての同時メッセージは、ユーザーがこのビューを終了して別のビューにアクセスした場合、即座にドロップできますか?

ビューが変更されたことを示すメッセージをホストに送信します。それに応じて応答するようにホストをプログラムします。

関連項目
http://socket.io/
http://socket.io/blog/introducing-socket-io-1-0/

3
Robert Harvey