怎么在java中使用WebSocket实现一个聊天消息推送功能

  介绍

怎么在java中使用WebSocket实现一个聊天消息推送功能?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

<强>环境:

JDK.1.7.0_51 apache-tomcat-7.0.53

java jar包:tomcat-coyote.jar, tomcat-juli.jar websocket-api。jar

ChatAnnotation消息发送类:

import  java.io.IOException;   import  java.util.HashMap;   import  java.util.Map;   import  java.util.concurrent.atomic.AtomicInteger;   ,   import  javax.websocket.OnClose;   import  javax.websocket.OnError;   import  javax.websocket.OnMessage;   import  javax.websocket.OnOpen;   import  javax.websocket.Session;   import  javax.websocket.server.ServerEndpoint;   ,   import  org.apache.juli.logging.Log;   import  org.apache.juli.logging.LogFactory;   ,   import  com.util.HTMLFilter,   ,/* *   ,* WebSocket 消息推送服务类   ,* @author 胡汉三   ,*   ,* 2014 - 11 - 18,下午7:53:13   ,*/@ServerEndpoint (value =,“/websocket/chat")   public  class  ChatAnnotation  {   ,   private 才能static  final  Log  Log =, LogFactory.getLog (ChatAnnotation.class);   ,   private 才能static  final  String  GUEST_PREFIX =,“Guest";   private 才能static  final  AtomicInteger  connectionIds =, new  AtomicInteger (0);   private 才能static  final  Map<字符串,Object>, connections =, new  HashMap<字符串,Object> ();   ,   private 才能final  String 昵称;   private 才能Session 会话;   ,   public 才能;ChatAnnotation (), {   ,,,nickname =, GUEST_PREFIX  +, connectionIds.getAndIncrement ();   ,,}   ,   ,   @OnOpen才能   public 才能;void 开始(Session 会话),{   ,,,this.session =,会话;   ,,,connections.put(昵称,,),,   ,,,String  message =, String.format (“*, % s  % s",,绰号,“has 加入!”);   ,,,广播(消息);   ,,}   ,   ,   @OnClose才能   public 才能;void 结束(),{   ,,,connections.remove(这个);   ,,,String  message =, String.format (“*, % s  % s",   ,,,,,,,绰号,“has 断开连接!”);   ,,,广播(消息);   ,,}   ,   ,   ,/* *   ,,*,消息发送触发方法   ,,*,@param 消息   ,,*/@OnMessage才能   public 才能;void 传入(String 消息),{   ,,,//,Never  trust 从而客户机   ,,,String  filteredMessage =, String.format (“% s: % s",   ,,,,,,,绰号,HTMLFilter.filter (message.toString ()));   ,,,广播(filteredMessage);   ,,}   ,   @OnError才能   public 才能;void  onError (Throwable  t), throws  Throwable  {   ,,,log.error (“Chat 错误:,“,+,t.toString (),, t);   ,,}   ,   ,/* *   ,,*,消息发送方法   ,,*,@param 味精   ,,*/private 才能;static  void 广播(String 味精),{   ,,如果(msg.indexOf (“Guest0") !=1) {   ,,sendUser(味精);   其他,,},{   ,,sendAll(味精);   ,,}   ,,},   ,,   ,/* *   ,,*,向所有用户发送   ,,*,@param 味精   ,,*/public 才能static  void  sendAll (String 味精){   ,,for  (String  key : connections.keySet ()), {   ,,,,ChatAnnotation  client =, null ;   ,,,,,try  {   ,,,,,,client =, (ChatAnnotation), connections.get(关键);   ,,,,,,,synchronized (客户端),{   ,,,,,,,,,client.session.getBasicRemote () .sendText(味精);   ,,,,,,,}   ,,,,,},catch  (IOException  e), {,   ,,,,,,,log.debug (“Chat 错误:,Failed 用send  message 用client",, e);   ,,,,,,,connections.remove(客户端);   ,,,,,,,try  {   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

怎么在java中使用WebSocket实现一个聊天消息推送功能