var socket = new WebSocket("ws://myserver.com:8081/"); socket.onopen = function () { console.log(" "); }; socket.onclose = function () { console.log (" "); }; socket.onmessage = function (event) { console.log ("   :", event.data); }; socket.send(messageString);
Server jetty = new Server(8081);public class ChatWebSocketHandler extends WebSocketHandler {
…
} import java.io.IOException; import java.util.Set; import java.util.concurrent.CopyOnWriteArraySet; import java.util.regex.Matcher; import java.util.regex.Pattern; import javax.servlet.http.HttpServletRequest; import org.eclipse.jetty.websocket.WebSocket; import org.eclipse.jetty.websocket.WebSocketHandler; public class ChatWebSocketHandler extends WebSocketHandler { /** *    */ private final Set<ChatWebSocket> webSockets = new CopyOnWriteArraySet<ChatWebSocket>(); /** *       * @param request * @param protocol  (   ws  wss) * @return */ @Override public WebSocket doWebSocketConnect(HttpServletRequest request, String protocol) { //      //         // throw new Exception(); //   ,       //      return new ChatWebSocket(); } private class ChatWebSocket implements WebSocket.OnTextMessage { /** *   */ private Connection connection; /** *   */ private String userName = null; /** *     */ private final Pattern authCmdPattern = Pattern.compile("^\\/auth ([\\S]+).*"); /** *       */ private final Pattern getUsersCmdPattern = Pattern.compile("^\\/getUsers.*"); /** *      */ private final Pattern helpCmdPattern = Pattern.compile("^\\/help.*"); /** *      * @param connection */ @Override public void onOpen(Connection connection) { //     ChatWebSocket::connection this.connection = connection; //      ChatWebSocketHandler::webSockets webSockets.add(this); } /** *      * @param data */ @Override public void onMessage(String data) { //       data = data.replaceAll("<", "<").replaceAll(">", ">"); //     if (authCmdPattern.matcher(data).matches()) { Matcher matcher = authCmdPattern.matcher(data); matcher.find(); //     userName = matcher.group(1); try { //      ChatWebSocketHandler::webSockets for (ChatWebSocket webSocket : webSockets) { //   ,     webSocket.connection.sendMessage("inf|" + (webSocket.equals(this) ? "  " : ("   <b>" + userName + "</b>"))); } } catch (IOException x) { //          connection.disconnect(); } //       } else if (getUsersCmdPattern.matcher(data).matches()) { String userList = ""; //      ChatWebSocketHandler::webSockets for (ChatWebSocket webSocket : webSockets) { userList += webSocket.userName + ", "; } userList = userList.substring(0, userList.length() - 2); try { //     connection.sendMessage("inf|  : " + userList); } catch (IOException x) { //          connection.disconnect(); } //      } else if (helpCmdPattern.matcher(data).matches()) { String helpMessage = "     " + "       Enter.<br />" + "   :<br />" + "<ul><li><b>/help</b> -    </li>" + "<li><b>/getUsers</b> -    </li>" + "<li><b>/auth <i></i></b> -  </li></ul>"; try { //   connection.sendMessage("inf|" + helpMessage); } catch (IOException x) { //          connection.disconnect(); } //       } else { try { //     if (userName == null) { connection.sendMessage("err|  <br />" + "  <b>/help</b>  "); return; } //      ChatWebSocketHandler::webSockets for (ChatWebSocket webSocket : webSockets) { //       in   //  ,  -  out webSocket.connection.sendMessage((webSocket.equals(this) ? "out|" : ("in|" + userName + "|")) + data); } } catch (IOException x) { //          connection.disconnect(); } } } /** *       * @param closeCode * @param message */ @Override public void onClose(int closeCode, String message) { //      ChatWebSocketHandler::webSockets webSockets.remove(this); } } }  import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; import org.eclipse.jetty.server.Server; import org.eclipse.jetty.server.handler.DefaultHandler; public class ChatServerServletContextListener implements ServletContextListener { /** *   Jetty */ private Server server = null; /** *       * @param event */ @Override public void contextInitialized(ServletContextEvent event) { try { //   Jetty  8081  this.server = new Server(8081); //  ChatWebSocketHandler   Jetty ChatWebSocketHandler chatWebSocketHandler = new ChatWebSocketHandler(); //     WebSocketHandlerContainer chatWebSocketHandler.setHandler(new DefaultHandler()); //     jetty server.setHandler(chatWebSocketHandler); //  Jetty server.start(); } catch (Throwable e) { e.printStackTrace(); } } /** *       * @param event */ @Override public void contextDestroyed(ServletContextEvent event) { //   jetty -  if (server != null) { try { //  Jetty server.stop(); } catch (Exception e) { e.printStackTrace(); } } } }  <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0"> <session-config> <session-timeout> 30 </session-timeout> </session-config> <welcome-file-list> <welcome-file>chat.html</welcome-file> </welcome-file-list> <listener> <listener-class>ChatServerServletContextListener</listener-class> </listener> </web-app> 

Source: https://habr.com/ru/post/128380/
All Articles