Em um projeto recente, eu precisava usar os novos recursos do Java WebSocket, então aprendi e senti que essa tecnologia era bastante divertida. Eu soube instantaneamente como o atendimento ao cliente on -line na página da web foi feito.
Vejamos a foto primeiro:
A comunicação em tempo real entre vários clientes é realizada.
Vejamos o diagrama da estrutura do projeto de código: é muito simples, apenas 1 classe e 1 página
Em seguida, olhe para o código específico
Veja o código de back -end primeiro
pacote com.main; importar java.io.ioException; importar java.util.concurrent.copyonWritearRayset; importar javax.websocket.*; importar javax.websocket.server.serverendpoint; Sua função é principalmente para definir a classe atual como um lado do servidor WebSocket. * O valor da anotação será usado para ouvir a conexão do usuário com o endereço da URL de acesso ao terminal. O cliente pode se conectar ao lado do servidor websocket através deste URL*/@serverEndPoint ("/websocket") classe pública H5ServletServersCocket {// Variáveis estáticas usadas para gravar o número atual de conexões on -line. Ele deve ser projetado para ser seguro para threads. private estático int onlineCount = 0; // O conjunto de thread-segue do pacote simultâneo é usado para armazenar o objeto MyWebSocket correspondente de cada cliente. Para perceber que o servidor se comunica com um único cliente, você pode usar o mapa para armazená -lo, onde a chave pode identificar o usuário privado de copywritearrayset <H5ServletServersocket> websocketset = novo copywritearrayset <h5servletServersocket> (); // Uma sessão de conexão com um determinado cliente precisa enviar dados para a sessão privada do cliente; /** * Método para chamar com sucesso o estabelecimento de conexão * * @param sessão * parâmetros opcionais. A sessão é uma sessão de conexão com um cliente e precisa enviar dados para o cliente através dele*/ @Onopen public void Onopen (sessão de sessão) {this.session = session; websocketset.add (isto); // addOnlineCount () no set; // Adicione 1 número de números on -line System.out.println ("Existe uma nova conexão para participar! O número atual de pessoas on -line é" + getOnlineCount ()); } / *** Método para conectar chamadas de fechamento* / @Onclose public void onclose () {websocketset.remove (this); // Remova SubOnlineCount () do set; // excluir subonlineCount () do set; // Exclua o número on -line por 1 número on -line System.out.println ("Há uma conexão fechada! O número atual de pessoas online é" + getOnlineCount ()); } / *** Método chamado após receber a mensagem do cliente** @param mensagem* mensagem enviada pelo cliente* @param sessão* parâmetros opcionais* / @onMessage public void onMessage (string message, sessão de sessão) {System.out.println ("mensagem do cliente:" + mensagem); // Mensagem em massa para (H5ServletServersSocket Item: websocketset) {try {item.sendMessage (message); } catch (ioexception e) {e.printStackTrace (); continuar; }}}} / ** * Chamado quando ocorre um erro * * @param session * @param error * / @onerrror public void onError (sessão session, erro de arremesso) {System.out.println ("Ocorreu o erro"); error.printStackTrace (); } /*** Este método é diferente dos métodos acima. Não há anotação, é um método adicionado de acordo com suas necessidades. * * @param mensagem * @throws ioexception */ public void sendMessage (string message) lança ioexception {this.session.getBasicRemote (). SendText (mensagem); // this.session.getasyncremote (). SendText (mensagem); } public static sincronizado int getOnlineCount () {return onlineCount; } public static sincronizado void addOnLineCount () {h5ServletServersocket.onLineCount ++; } public static sincronizado void subonlineCount () {h5ServletServersocket.onLineCount--; }}O próximo é o código da página front-end:
<%@ página de página = "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 = "cor: azul"> 【status】 </div> <r /> apelido <input id = "nome de usuário" type = "text" requerido = "requerido" /> <br> content <but id id = "text" type = "text" /> <br /> <butão onclick = "send ()"> send < /buttle <butter " OnClick = "CloseWebSocket ()"> Fechar </botão> </body> <script type = "text/javascript"> var websocket = null; // julga se o navegador atual suporta websocket if ('websocket' na janela) {websocket = new websocket ("ws: //10.1.1.106: 8080/soket/websocket"); } else {alert ('websocket não suportado!')} // Método de retorno de chamada para erros em conexão websocket.onerror = function () {setMessageInnerHtml ("erro"); }; // Método de retorno de chamada para conexão bem -sucedida websocket.onopen = function (event) {setMessageInnerHtml ("sala de bate -papo ativada"); } // Método de retorno de chamada para receber a mensagem websocket.onmessage = function () {setMessageInnerhtml (event.data); } // Conexão Método de retorno de chamada fechado websocket.onclose = function () {SetMessageInnerHtml ("Chefe Close"); } // Ouça o evento de fechamento da janela. Quando a janela estiver fechada, feche ativamente a conexão Websocket para impedir que a janela se fechasse antes que a conexão seja desconectada e o lado do servidor lançará exceções. window.onBeforeUnload = function () {websocket.close (); } // Mostrar a mensagem na função da página da web setMessageInnerHtml (innerHtml) {document.getElementById ('message'). Innerhtml + = innerhtml + '<br/>'; } // Fechar a função de conexão CloseWebSocket () {websocket.close (); } // Envie a função da mensagem send () {var userName = document.getElementById ('nome de usuário'). Value; var message = document.getElementById ('text'). value; var msg = "【" + nome de usuário + "] fale:" + mensagem websocket.send (msg); } </script> </html>O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.