最近のプロジェクトでは、Java Websocketの新機能を使用する必要があるため、学び、このテクノロジーはとても楽しいと感じました。 Webページのオンラインカスタマーサービスがどのように行われたかを即座に知りました。
最初に写真を見てみましょう:
複数のクライアント間のリアルタイム通信が実現します。
コードプロジェクト構造図を見てみましょう:それは非常にシンプルで、たった1つのクラスと1ページ
次に、特定のコードを見てください
最初にバックエンドコードを見てください
パッケージcom.main; import java.io.ioexception; import java.util.concurrent.copyonwritearrayset; Import javax.websocket。*; import javax.websocket.serverendpoint;その機能は、主に現在のクラスをWebsocketサーバー側として定義することです。 *注釈値は、ターミナルアクセスURLアドレスへのユーザーの接続を聞くために使用されます。クライアントは、このurl*/@serverEndpoint( "/websocket")パブリッククラスH5ServleTserVersocket {//現在のオンライン接続を記録するために使用される静的変数を介してWebSocketサーバー側に接続できます。スレッドセーフになるように設計する必要があります。 private static int onlinecount = 0; //同時パッケージのスレッドセーフセットを使用して、各クライアントの対応するMyWeBsocketオブジェクトを保存します。サーバーが単一のクライアントと通信することを認識するには、MAPを使用してそれを保存できます。キーはユーザープライベートのcopyonWritearRayset <H5ServleTERVersocket> websocketets = new CopyOnWritearRayset <H5ServleTERSERVERSOCKEST>()を識別できます。 //特定のクライアントとの接続セッションは、クライアントプライベートセッションセッションにデータを送信する必要があります。 /** *接続確立を正常に呼び出す方法 * * @paramセッション *オプションパラメーター。セッションはクライアントとの接続セッションであり、それを介してクライアントにデータを送信する必要があります*/ @onopen public void onopen(セッションセッション){this.session = session; websocketset.add(this); // addonlinecount()in set; // 1つのオンライン番号System.out.println( "参加する新しい接続があります!現在のオンライン人の数は" + getonlinecount()です。 } / ***閉じる呼び出しを接続するメソッド* / @onclose public void onclose(){websocketset.remove(this); // SETからsubonlinecount()を削除します。 // SETからSubonlineCount()を削除します。 //オンライン番号を1つのオンライン番号System.out.println( "閉じた接続があります!オンラインの現在の人数は" + getonlinecount()); } / ***クライアントメッセージを受信した後に呼び出されるメソッド** @paramメッセージ*クライアントが送信したメッセージ* @paramセッション*オプションパラメーター* / @onmessage public void onmessage(string message、session){system.out.println( "クライアントからのメッセージ:" +メッセージ); //(h5servletserversocket item:websocketetset){try {item.sendmessage(message); } catch(ioexception e){e.printstacktrace();続く; }}}}} / ** *エラーが発生したときに呼び出されます * * @param Session * @paramエラー * / @onerror public void onerror(セッションセッション、スロー可能なエラー){system.out.println( "エラーが発生しました"); error.printstacktrace(); } /***この方法は上記の方法とは異なります。注釈はありません。これは、ニーズに応じて追加された方法です。 * * @param message * @throws ioexception */ public void sendmessage(string message)throws ioexception {this.session.getBasicRemote()。sendtext(message); // this.session.getasyncremote()。sendtext(message); } public static同期int getonlinecount(){return onlinecount; } public static同期void addonlinecount(){h5servletserversocket.onlinecount ++; } public static同期void subonlinecount(){h5servletserversocket.onlinecount-; }}次は、フロントエンドページコードです。
<%@ page Language = "java" import = "java.util。*" pageencoding = "utf-8"%> <%string path = request.getContextPath(); string basepath = request.getscheme() + "://" + request.getServername() + ":" + request.getServerport() + path + "/"; style = "color:blue">【ステータス】</div> <br/> nickname <input id = "username" text = "required"/> <br> content <input id = "text" type "type =" text "/> <br/> <button onclick =" send() "> send </button> <button =" close </button( type = "text/javascript"> var websocket = null; //現在のブラウザがWebSocketをサポートしているかどうかを判断します(ウィンドウで「WebSocket」){webSocket = new WebSocket( "ws://10.1.1.106:8080/socket/websocket"); } else {alert( 'websocket not supported!')} //接続のエラーのコールバックメソッドwebsocket.onerror = function(){setmessageinnerhtml( "error"); }; //接続を成功させるためのコールバック方法websocket.onopen = function(event){setMessageInnerhtml( "チャットルームイネーブル"); } //メッセージwebsocket.onmessage = function()を受信するためのコールバックメソッド{setmessageinnerhtml(event.data); } //接続クローズドコールバックメソッドwebsocket.onclose = function(){setMessageInnerhtml( "チャットルームクローズ"); } //ウィンドウクロージングイベントを聞いてください。ウィンドウが閉じたら、接続が切断される前にウィンドウが閉じないようにWebSocket接続を積極的に閉じ、サーバー側が例外をスローします。 window.onbeforeunload = function(){websocket.close(); } // Webページにメッセージを表示しますsetmessageinnerhtml(innerhtml){document.getElementById( 'message')。innerhtml + = innerhtml + '<br/>'; } //接続関数を閉じるclosewebsocket(){websocket.close(); } //メッセージfunction send(){var username = document.getElementbyId( 'username')。value; var message = document.getElementById( 'text')。value; var msg = "【" + username + "] speak:" +メッセージwebsocket.send(msg); } </script> </html>上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。