В недавнем проекте мне нужно было использовать новые функции Java Websocket, поэтому я узнал его и почувствовал, что эта технология была довольно веселой. Я сразу понял, как было сделано онлайн -обслуживание клиентов на веб -странице.
Сначала посмотрим на картинку:
Общение в реальном времени между несколькими клиентами реализовано.
Давайте посмотрим на диаграмму структуры проекта кода: она очень просто, только 1 класс и 1 страница
Затем посмотрите на конкретный код
Сначала посмотрите на код Backend
пакет com.main; импорт java.io.ioexception; import java.util.concurrent.copyonwritearraySet; import javax.websocket.*; импорт javax.websocket.server.serverendpoint;/*** @serverendpoint. Аннотация-это аннотация на уровне класса. Его функция в основном для определения текущего класса как на стороне сервера WebSocket. * Значение аннотации будет использоваться для прослушивания подключения пользователя с адресом URL -адреса доступа к терминалу. Клиент может подключиться к стороне сервера WebSocket через этот URL*/@ServerEndPoint ("/websocket") открытый класс H5ServletServersocket {// Статические переменные, используемые для записи текущего количества онлайн -соединений. Он должен быть спроектирован так, чтобы быть защищенным. частный статический интенсивный onlinecount = 0; // Регистрационный набор параллельного пакета используется для хранения соответствующего объекта MyWebSocket каждого клиента. Чтобы понять, что сервер связывается с одним клиентом, вы можете использовать карту для ее хранения, где ключ может идентифицировать пользователя частного статического CopyonWritearRaySet <h5servletserversocket> websocketset = new CopyonWritearRaySet <h5servletserversocket> (); // сеанс подключения с определенным клиентом необходимо отправить данные на частную сеанс клиента; /** * Метод для успешного вызова соединения * * * @param session * Необязательные параметры. Сеанс - это сеанс подключения с клиентом, и он должен отправлять данные клиенту через него*/ @onopen public void onopen (сеанс сеанса) {this.session = session; websocketset.add (это); // addonLineCount () в наборе; // Добавить 1 онлайн -номера System.out.println («Есть новое соединение, чтобы присоединиться! Текущее количество онлайн -людей - + getOnlineCount ()); } / *** Метод подключения закрывающих вызовов* / @onclose public void onclose () {websocketset.remove (this); // Удалить subonlineCount () из набора; // DELETE SUBONLINECOUNT () из SET; // Удалить онлайн -номер по 1 онлайн -номера System.out.println («Закрыто соединение! Текущее количество людей в Интернете - + getOnlineCount ()); } / *** Метод, вызванный после получения клиентского сообщения** @param Сообщение* Сообщение, отправленное клиентом* @param session* Необязательные параметры* / @onmessage public void onmessage (строковое сообщение, сеанс сеанса) {System.out.println («Сообщение от клиента:" + сообщение); // объемное сообщение для (h5servletserversocket item: websocketset) {try {item.sendmessage (message); } catch (ioException e) {e.printstackTrace (); продолжать; }}}} / ** * Вызовите, когда возникает ошибка * * @param session * @param error * / @onerror public void onerror (сеанс сеанса, ошибка, ошибка) {System.out.println ("произошла ошибка"); error.printstacktrace (); } /*** Этот метод отличается от приведенных выше методов. Аннотации нет, это метод, добавленный в соответствии с вашими потребностями. * * @param message * @throhs ioexception */ public void sendmessage (String Message) Throws ioException {this.session.getBasicRemote (). SendText (message); // this.session.getAsyncRemote (). SendText (сообщение); } public static synchronized int getOnlineCount () {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>My WebSocket</title></head><body> Welcome to the chat room<div id="message" style="color: blue">【Status】</div> <br /> Nickname<input id="username" type="text" required="required"/> <br> Content<input id="text" type="text" /> <br /> <button onclick="send()">Send</button> <button onclick="closeWebSocket()">Close</button></body><script type = "text/javascript"> var websocket = null; // Судите, поддерживает ли текущий браузер WebSocket if ('websocket' в Window) {webSocket = new WebSocket ("ws: //10.1.1.106: 8080/socket/websocket"); } else {alert ('websocket не поддерживается!')} // Метод обратного вызова для ошибок в соединении websocket.onerror = function () {setmessageinnerhtml ("error"); }; // Метод обратного вызова для успешного соединения websocket.onopen = function (event) {setMessageInnerHtml ("Чат -комната включена"); } // Метод обратного вызова для получения сообщения websocketcocket.onmessage = function () {setmessageinnerhtml (event.data); } // Подключение CONNECTION MEDECTED WEBSOCKETOCKET.ONCLOSE = function () {setMessAgeInnerHtml ("Зал за закрытие чата"); } // Слушайте событие закрытия окна. Когда окно закрыто, активно закрывайте соединение WebSocket, чтобы предотвратить закрытие окна, прежде чем соединение будет отключено, и сторона сервера будет бросить исключения. window.onbeforeunload = function () {websocket.close (); } // Показать сообщение на функции веб -страницы setMessageInnerhtml (innerhtml) {document.getElementById ('message'). InnerHtml + = innerHtml + '<br/>'; } // Закрыть функцию соединения CloseWebSocket () {webSocket.close (); } // Отправить функцию сообщения send () {var username = document.getElementByid ('username'). Value; var message = document.getElementById ('text'). value; var msg = "【" + username + "] говорить:" + message websocket.send (msg); } </script> </html>Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.