介绍
怎么在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实现一个聊天消息推送功能