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