Springboot+websocketチャットルーム(複数人チャット、シングルチャット)

3569 ワード

Springboot+websocketチャットルーム(複数人チャット、シングルチャット)ソースコードダウンロードアドレス
https://download.csdn.net/download/qq_37174383/10635130
 
 
WebSocketって何?
WebSocketはネットワーク通信プロトコルです.RFC 6455は、その通信規格を定義する.
WebSocketは、HTML 5が提供し始めた単一のTCP接続上でフルデュプレクス通信を行うプロトコルである.
なぜWebSocketが必要なの?
コンピュータネットワークプロトコルを知っている人は、HTTPプロトコルが無状態、無接続、一方向のアプリケーション層プロトコルであることを知っているはずです.リクエスト/レスポンスモデルを採用しています.通信要求はクライアントからのみ開始され,サービス側は要求に対して応答処理を行う.
この通信モデルには、HTTPプロトコルでは、サーバがクライアントに積極的にメッセージを送信することができないという弊害がある.
このような一方向要求の特徴は,サーバが連続的に状態が変化すると,クライアントが知るのは非常に面倒であることに決まっている.ほとんどのWebアプリケーションでは、頻繁な非同期JavaScriptとXML(AJAX)リクエストによって長いポーリングが実現されます.ポーリングの効率が低く、リソースが非常に浪費されます(接続を停止しないか、HTTP接続を常に開く必要があるため).
そのため、エンジニアたちはもっと良い方法があるかどうかを考えています.WebSocketはこのように発明された.WebSocket接続を使用すると、クライアントとサーバの間でフルデュプレクス通信が可能になり、どちらも確立された接続によってデータを他端にプッシュできます.WebSocketは1回の接続を確立するだけで、接続状態を維持することができます.これは、ポーリング方式による接続の継続的な確立に比べて、明らかに効率が大幅に向上します.
WebSocketはどのように働いていますか?
Webブラウザとサーバは、接続の確立と維持のためにWebSocketsプロトコルを実装する必要があります.WebSockets接続は長期にわたって存在するため、典型的なHTTP接続とは異なり、サーバに重要な影響を及ぼす.
マルチスレッドまたはマルチプロセスベースのサーバは、接続を開き、要求をできるだけ迅速に処理し、接続を閉じることを目的としているため、WebSocketsには適用できません.実際のWebSocketsサーバ側の実装には、非同期サーバが必要です.
WebSocketクライアント
クライアントでは、WebSockets用にJavaScriptライブラリを使用する必要はありません.WebSocketsを実装するWebブラウザは、WebSocketsオブジェクトを介して必要なすべてのクライアント機能を公開します(主にHtml 5をサポートするブラウザを指します).
クライアントAPI
次のAPIは、WebSocketオブジェクトを作成するために使用されます.
var Socket = new WebSocket(url, [protocol] );

上記のコードの最初のパラメータurlは、接続するURLを指定します.2番目のパラメータprotocolはオプションで、許容可能なサブプロトコルを指定します.
WebSocketプロパティ
WebSocketオブジェクトのプロパティを以下に示します.上記のコードを使用してSocketオブジェクトを作成したとします.
ツールバーの
説明
Socket.readyState
読み取り専用プロパティreadyStateは接続ステータスを表し、0-接続が確立されていないことを示します.1-接続が確立され、通信可能であることを示します.2-接続が閉じられていることを示します.3-接続が閉じているか、接続が開かないことを示します.
Socket.bufferedAmount
読み取り専用プロパティbufferedAmountはsend()によってキューに入れられて転送を待っていますが、まだ発行されていないUTF-8テキストバイト数です.
WebSocketイベント
以下はWebSocketオブジェクトに関するイベントです.上記のコードを使用してSocketオブジェクトを作成したとします.
≪イベント|Events|ldap≫
イベントハンドラ
説明
open
Socket.onopen
接続確立時にトリガー
message
Socket.onmessage
クライアントがサービス側データを受信するとトリガーされます
error
Socket.onerror
通信エラー発生時にトリガー
close
Socket.onclose
接続クローズ時にトリガー
WebSocketメソッド
WebSocketオブジェクトに関するメソッドを以下に示します.上記のコードを使用してSocketオブジェクトを作成したとします.
方法
説明
Socket.send()
接続を使用したデータの送信
Socket.close()
接続を閉じる
//       WebSocket   
var ws = new WebSocket("ws://localhost:9998/echo");

//    web socket         
ws.onopen = function () {
  //    send()       
  ws.send("    ");
  alert("     ...");
};

//             
ws.onmessage = function (evt) {
  var received_msg = evt.data;
  alert("     ...");
};

//    web socket         
ws.onclose = function () {
  alert("     ...");
};

WebSocketサービス
WebSocketはサービス側での実現が非常に豊富です.Node.js、Java、C++、Pythonなど多くの言語に独自のソリューションがあります.
以下では、WebSocketの学習中に接触したWebSocketサービス・エンド・ソリューションについて説明します.
Node.js
一般的なノード実装には以下の3つがある.
  • µWebSockets
  • Socket.IO
  • WebSocket-Node

  • Java
    Javaのwebは一般的にservletコンテナに依存している.
    私が使ったservlet容器は、Tomcat、Jetty、Resinです.このうち、Tomcat 7、Jetty 7およびそれ以上のバージョンではWebSocketがサポートされ始めています(バージョンが変更されるにつれてWebSocketのサポートが変更される可能性があるため、新しいバージョンを推奨します).
    また、SpringフレームワークはWebSocketにもサポートされています.
    ただし,以上のアプリケーションはWebSocketに対してそれぞれ実装されている.しかし、それらはいずれもRFC 6455の通信規格に従い、Java APIはJSR 356−JavaTM API for WebSocket規格に統一的に従う.したがって,実際の符号化ではAPIの差は大きくない.