私のアプリケーションのクライアント側の部分は、厳密な順序で WebSocket メッセージを処理する必要があります。残念ながら、各メッセージの処理にはかなりの時間がかかるため (約 3 秒)、最初のメッセージが終了する前に別のメッセージが表示されます。いくつかのメッセージの後、順序はまったく異なります。この問題を JavaScript で解決する方法。
タスク キューについて考えましたが、Web アプリの GUI をブロックしないように実装する方法がわかりません。
私のアプリケーションのクライアント側の部分は、厳密な順序で WebSocket メッセージを処理する必要があります。残念ながら、各メッセージの処理にはかなりの時間がかかるため (約 3 秒)、最初のメッセージが終了する前に別のメッセージが表示されます。いくつかのメッセージの後、順序はまったく異なります。この問題を JavaScript で解決する方法。
タスク キューについて考えましたが、Web アプリの GUI をブロックしないように実装する方法がわかりません。
他の答えは間違っていると思います。WebSocket IS TCP は、配信の順序が保証されていることを意味します。@Maël Nison が引用したように、RFC6455を参照してください。
メッセージフラグメントは、送信者が送信した順序で受信者に配信する必要があります
したがって、処理が順番に開始されることは当然と考えることができます。ただし、非同期コールバックが多数ある場合は、前の処理が進行する前に後の処理が終了する可能性があります。しかし、それは単純に間違った実装です (そしてちょっとしたコールバック地獄です)。
類似の投稿:
現時点では、ブラウザーの WebSocket API は、フレーム ベースまたはストリーミングオプション/API を公開していません。したがって、これをネイティブに実現するオプションは実際にはありません。
つまり、サーバーからクライアントに送信するデータ パケット内に独自のロジック/構造を作成する必要があります。これは比較的簡単な作業であるはずです。最上位にインデックス付きのプロパティを持つ単純な JSON 文字列/オブジェクトを送信することを考えることができます。
{
packetIndex: 0,
data: { }
}
クライアントスクリプトは、到着した各パケットを調べて、正しく分類する必要があります(到着したパケットを追跡し、インデックスが高すぎるパケットが到着した場合は「ホールド+待機」します)