15

私のアプリケーションのクライアント側の部分は、厳密な順序で WebSocket メッセージを処理する必要があります。残念ながら、各メッセージの処理にはかなりの時間がかかるため (約 3 秒)、最初のメッセージが終了する前に別のメッセージが表示されます。いくつかのメッセージの後、順序はまったく異なります。この問題を JavaScript で解決する方法。

タスク キューについて考えましたが、Web アプリの GUI をブロックしないように実装する方法がわかりません。

4

2 に答える 2

28

他の答えは間違っていると思います。WebSocket IS TCP は、配信の順序が保証されていることを意味します。@Maël Nison が引用したように、RFC6455を参照してください。

メッセージフラグメントは、送信者が送信した順序で受信者に配信する必要があります

したがって、処理が順番に開始されることは当然と考えることができます。ただし、非同期コールバックが多数ある場合は、前の処理が進行する前に後の処理が終了する可能性があります。しかし、それは単純に間違った実装です (そしてちょっとしたコールバック地獄です)。

類似の投稿:

于 2015-08-08T14:30:16.983 に答える
-5

現時点では、ブラウザーの WebSocket API は、フレーム ベースまたはストリーミングオプション/API を公開していません。したがって、これをネイティブに実現するオプションは実際にはありません。

つまり、サーバーからクライアントに送信するデータ パケット内に独自のロジック/構造を作成する必要があります。これは比較的簡単な作業であるはずです。最上位にインデックス付きのプロパティを持つ単純な JSON 文字列/オブジェクトを送信することを考えることができます。

{
    packetIndex: 0,
    data: { }
}

クライアントスクリプトは、到着した各パケットを調べて、正しく分類する必要があります(到着したパケットを追跡し、インデックスが高すぎるパケットが到着した場合は「ホールド+待機」します)

于 2013-01-11T21:57:28.293 に答える