최근 프로젝트에서 나는 Java Websocket의 새로운 기능을 사용해야했기 때문에 그것을 배우고이 기술이 매우 재미 있다고 생각했습니다. 웹 페이지의 온라인 고객 서비스가 어떻게 완료되었는지 즉시 알았습니다.
먼저 그림을 보자 :
여러 클라이언트 간의 실시간 커뮤니케이션이 실현됩니다.
코드 프로젝트 구조 다이어그램을 살펴 보겠습니다. 매우 간단합니다. 단 1 수업과 1 페이지
그런 다음 특정 코드를보십시오
백엔드 코드를 먼저보십시오
패키지 com.main; import java.io.ioexception; import java.util.concurrent.copyonwritearrayset; import javax.websocket.*; import javax.websocket.server.serverendpoint;/*** @serverendpoint 이니어링은 클래스 수준의 주석입니다. 이 기능은 주로 현재 클래스를 WebSocket 서버 측로 정의하는 것입니다. * 주석 값은 터미널 액세스 URL 주소에 대한 사용자의 연결을 듣는 데 사용됩니다. 클라이언트는이 url*/@serverendpoint ( "/websocket")를 통해 WebSocket 서버에 연결할 수 있습니다. 공개 클래스 H5ServletServersocket {// 현재 온라인 연결 수를 기록하는 데 사용되는 정적 변수. 스레드-안전하도록 설계되어야합니다. 개인 정적 int onlinecount = 0; // 동시 패키지의 스레드 안전 세트는 각 클라이언트의 해당 MyWebSocket 객체를 저장하는 데 사용됩니다. 서버가 단일 클라이언트와 통신한다는 사실을 알기 위해 맵을 사용하여이를 저장할 수 있습니다. 여기서 키는 사용자 개인 정적 정적 복사상 WriteArrayset <h5servletserversocket> websocketSet = new CopyonWriteArrayset <h5servletserversocket> ()를 식별 할 수 있습니다. // 특정 클라이언트와의 연결 세션은 클라이언트 개인 세션 세션에 데이터를 보내야합니다. /** * 연결 설정을 성공적으로 호출하는 방법 * * @param 세션 * 선택적 매개 변수. 세션은 클라이언트와의 연결 세션이며,이를 통해 클라이언트에게 데이터를 보내야합니다*/ @onopen public void onopen (세션 세션) {this.session = session; websocketset.add (this); // 세트의 addOnlineCount (); // 1 개의 온라인 번호 system.out.println을 추가합니다 ( "가입 할 새로운 연결이 있습니다! 현재 온라인 사람의 수는" + getonlineecount ()); } / *** 폐쇄 통화를 연결하는 방법* / @onclose public void onclose () {websocketSet.remove (this); // 세트에서 subOnlineCount ()를 제거합니다. // set에서 subonlineecount ()를 삭제합니다. // 온라인 번호 시스템으로 온라인 번호를 삭제합니다. } / *** 클라이언트 메시지를받은 후 호출 된 메소드** @param 메시지* 클라이언트가 보낸 메시지* @param 세션* 선택적 매개 변수* / @onmessage public void onMessage (문자열 메시지, 세션) {System.out.println ( "클라이언트의 메시지 :" + 메시지); // (h5servletserversocket item : websocketset) {try {item.sendmessage (메시지); } catch (ioexception e) {e.printstacktrace (); 계속하다; }}}}} / ** * 오류가 발생할 때 호출 * * @param 세션 * @param error * / @Error public void onerRor (세션 세션, 던질 가능한 오류) {System.out.println ( "오류가 발생"); error.printstacktrace (); } /***이 방법은 위의 방법과 다릅니다. 주석이 없으며 필요에 따라 추가 된 방법입니다. * * @param 메시지 * @throws ioException */ public void sendMessage (문자열 메시지)는 ioException {this.session.getBasicRemote (). sendText (메시지); // this.session.getAsyncremote (). sendText (메시지); } public static synchronized intonlineecount () {return onlinecount; } public static synchronized void addOnlinecount () {h5servletserversocket.onlinecount ++; } public static synchronized 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 + ";%> <! doctype html> <html> <head> <base href ="<%= basepath%> "> <Title> </title> </title> </title> id = "message"style = "color : blue"> 【【상태 < /div> <br /> 닉네임 <input id = "username"type = "text"필수 = "필수" /> <br> 컨텐츠 <입력 id = "text" /> <br /> <button onclick = "send ()"> <버튼 onclick = "Cosewebsocket ()"> Close </button> </body> <script type = "text/javaScript"> var websocket = null; // 현재 브라우저가 if ( 'wind } else {alert ( 'websocket not bupported!')} // 연결 오류에 대한 콜백 메소드 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 (); } // 웹 페이지 기능에 메시지 표시 SetMessageInnerHtml (innerHtml) {document.getElementById ( 'message'). innerHtml + = innerHtml + '<br/>'; } // 연결 함수를 닫습니다 Cropewebsocket () {websocket.close (); } // 메시지를 보내는 메시지 보내기 () {var username = document.getElementById ( 'username'). 값; var message = document.getElementById ( 'text'). 값; var msg = "" " + username +"] speak : " + message websocket.send (msg); } </script> </html>위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.