Este artigo compartilha o código específico do Java WebSocket para implementar a função Push de mensagem de bate -papo para sua referência. O conteúdo específico é o seguinte
ambiente:
Jdk.1.7.0_51
Apache-Tomcat-7.0.53
pacote java jar: tomcat-coyote.jar, tomcat-juli.jar, websocket-api.jar
Mensagem de Chatannotation Classe de envio:
importar java.io.ioException; importar java.util.hashmap; importar java.util.map; importar java.util.concurrent.atomic.atomicinteger; importar javax.websocket.onclose; importar javax.websocket.onerror; importar javax.websocket.onmessage; importar javax.websocket.onopen; import javax.websocket.session; importjache; importjache; importjache; importjache; importache; importache; importjache; org.apache.juli.logging.logFactory; importação com.util.htmlfilter; /*** Mensagem websocket Push Service Class* @Author Hu Hansan** 2014-11-18 19:53:13*/ @ServerEnDPoint (value = "/websocket/chat") public class Chatannotation {private static log final log = logFactory.GetLog (Chatannotation.class); String final estática privada Guest_prefix = "Guest"; private estático final atomicinteger ConnectionIds = new AtomicInteger (0); mapa final estático privado <string, objeto> conexões = new hashmap <string, object> (); apelido de string final privado; sessão privada sessão; public chatannotation () {apelido = hetter_prefix + ConnectionIds.getAndIncrement (); } @Onopen public void Start (sessão de sessão) {this.session = session; conexão.put (apelido, isto); String message = string.format ("* %s %s", apelido ", juntou -se."); transmissão (mensagem); } @Onclose public void end () {conexão.remove (this); String message = string.format ("* %s %s", apelido, "desconectado."); transmissão (mensagem); } / *** Mensagem enviando método de gatilho* @param mensagem* / @onMessage public void de entrada (mensagem de string) {// Nunca confie na string client string filtredMessage = string.format (" %s: %s", apelido, htmlfilter.filter (message.toString ())); transmissão (filtredMessage); } @ONerror Public void onError (throwable t) lança jogável {log.error ("erro de bate -papo:" + t.toString (), t); } / *** Método de envio da mensagem* @param msg* / private static void Broadcast (string msg) {if (msg.indexof ("hetter00")! =-1) {sendUser (msg); } else {sendall (msg); }} / *** Enviar para todos os usuários* @param msg* / public static void sendall (string msg) {for (string key: conext.KeySet ()) {chatannotation client = null; tente {client = (chatannotation) conexão.get (key); sincronizado (client) {client.session.getBasicRemote (). SendText (msg); }} catch (ioexception e) {log.debug ("Erro de bate -papo: falhou ao enviar a mensagem para o cliente", e); conexion.remove (cliente); tente {client.session.close (); } catch (ioexception e1) {// ignore} string message = string.format ("* %s %s", client.nickname, "foi desconectado."); transmissão (mensagem); }}} / *** Envie uma mensagem para o usuário especificado* @param msg* / public static void senduser (string msg) {chatannotation c = (chatannotation) conexão.get ("hetter0"); tente {c.session.getBasicRemote (). SendText (msg); } catch (ioexception e) {log.debug ("Erro de bate -papo: falhou ao enviar a mensagem para o cliente", e); conexion.remove (c); tente {c.session.close (); } catch (ioexception e1) {// ignore} string message = string.format ("* %s %s", c.nickname, "foi desconectado."); transmissão (mensagem); }}}Classe de ferramentas htmlfilter:
/*** HTML Tool Class** @author hu hansan*/public Final Class htmlfilter {public static string filter (string message) {if (message == null) return (null); conteúdo de char [] = novo char [message.length ()]; message.getchars (0, message.length (), content, 0); StringBuilder resultado = new StringBuilder (Content.Length + 50); for (int i = 0; i <content.length; i ++) {switch (content [i]) {case '<': resultado.append ("<"); quebrar; case '>': resultado.append (">"); quebrar; case '&': resultado.append ("&"); quebrar; case '"': resultado.append (" ""); quebrar; padrão: resultado.append (conteúdo [i]); }} return (resultado.toString ()); }}página:
<%@ página de página = "java" import = "java.util.*" pageEncoding = "utf-8"%> <%string path = request.getContextPath (); string basepath = request.getscheme ()+": //"+request.getSername ()+":"+sot.g.merport (// "+request.getSername ()+": "+. coding = "utf-8"?> <html xmlns = "http://www.w3.org/1999/xhtml" xml: lang = "en"> <head> <title> teste </title> <estilo "" text/css "> input #chat {width {width: 410p 410p: 410p 410p: 410p 410p; } #console {borda: 1px sólido #cccccc; cor-direita: #99999; cor-cor de fronteira: #99999; Altura: 170px; Overflow-y: rolagem; preenchimento: 5px; largura: 100%; } #console p {preenchimento: 0; margem: 0; } </style> <script type = "text/javascript"> var chat = {}; Chat.socket = null; Chat.connect = (function (host) {if ('websocket' na janela) {chat.socket = new websocket (host);} else if ('mozwebsocket' na janela) {chat.socket = new Mozwebsocket (host);}; Console.Log (INFORMAÇÕES: Conexão WebSocket aberta. '); fechado. '); Chat.initialize = function () {if (window.location.protocol == 'http:') {chat.connect ('ws: //' + window.location.host + '/socket2/websocket/chat'); } else {chat.connect ('wss: //' + window.location.host + '/socket2/websocket/chat'); }}; Chat.sendMessage = (function () {var message = document.getElementById ('chat'). Value; if (message! var console = {}; Console.log = (function (message) {var console = document.getElementById ('console'); var p = document.createElement ('p'); console.RemoveChild (Console.FirstChild); Chat.initialize (); Document.adDeventListener ("DomContentLoaded", function () {// Remover elementos com classe "noscript" - <oscript> não é permitido em xhtml var noscripts = document.getElementsByclassName ("noscript"); para (var i = 0; i <noscripts.lname; Nofripts [i] .parentnode.RemoveChild (Nofripts [i]); </script> </ad Head> <body> <div> <h2 style = "cor: #ff0000"> parece que seu navegador não suporta JavaScript! Os websockets confiam no JavaScript que está sendo ativado. Ative JavaScript e recarregue esta página! </h2> </div> <div> <p> <input type = "text" placeholder = "por favor, digite content" id = "chat"/> </p> <div id = "console-container"> <id id = "console"/> </div> </div> </bodyl> </ht "> <htr =" console "/> </div> </div> </body> </ht" Você pode especificar para enviá -lo para um determinado usuário ou pode enviar tudo. Para detalhes, consulte o método de transmissão da classe Chatannotation.
Ao publicar o programa, lembre-se de excluir os três pacotes JAR: Tomcat-Coyote.jar, Tomcat-Juli.jar e WebSocket-api.jar e iniciar o Tomcat.
Captura de tela do programa, o usuário do Guest0 envia informações e faz julgamentos em segundo plano e apenas o envia:
Guest1:
Guest2:
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.