2

Java Tomcat を websocket サーバーとして使用しています。

Websocket と http ストリーミング (ポーリングとロング ポーリングについては言及していません) の主な違いは、Websocket では通常の raw ソケット プログラミングに似た双方向通信が可能であることだと思います。(上記は私の理解です。間違っている可能性があります。お気軽に修正してください。)

私の質問は、Web クライアント (ブラウザー) が、既に開いている Websocket を介して別の要求を送信し続ける方法です。通常の http リクエストは別のリクエストを新しいソケット接続として扱いますが、websocket はそうではありません。サーバー側またはクライアント(ブラウザ)側で処理する必要がありますか?

4

1 に答える 1

6

はい、WebSocketは双方向です。重要な結果は、サーバーからクライアントにデータを効率的にプッシュできることです。

基になるソケットは開いたままになります(または、開いたままにできない場合は、必要に応じて再度開きます)。HTTP 1.1はまだそれを行っていることに注意してください:

HTTP / 1.1は、元のHTTP(HTTP / 1.0)のリビジョンです。HTTP / 1.0では、リソース要求ごとに同じサーバーへの個別の接続が確立されます。HTTP / 1.1は、ページが配信された後、接続を複数回再利用して、画像、スクリプト、スタイルシートなどをダウンロードできます。したがって、TCP接続の確立にはかなりのオーバーヘッドが発生するため、HTTP/1.1通信の遅延は少なくなります。

クライアント側とサーバー側の両方で処理する必要があります。もちろん、これは両方のソフトウェアが更新されることを意味します(古いブラウザーと古いサーバーはWebSocketを処理できません)。

編集(コメントの交換後):

クライアント側、接続を初期化する方法は次のとおりです。

var ws = new WebSocket('ws://'+document.location.host+'/ws');
ws.onopen = function() {
       // do something
};
ws.onerror = function() {
       // do something
};
ws.onclose = function() {
       // do something
};
ws.onmessage = function(msgevent) {
    var msg = JSON.parse(msgevent.data);
    // handle incoming message
};

ws変数を保持し、その後、と同じ接続を使用してクライアントからサーバーにプッシュできます。

ws.send(window.JSON.stringify(msg)); // msg is a basic js object
于 2012-09-11T09:29:57.277 に答える