首页>代码>java WebSocket最好的入门demo(实现简易的网页多人聊天)>/websocketPrj Maven Webapp/src/main/comm/websokect/WebSocketTest.java
package websokect; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.concurrent.CopyOnWriteArraySet; 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; @ServerEndpoint("/websocket") public class WebSocketTest { //静态变量,用来记录当前在线连接数。应该把它设计成线程安全的。 private static int onlineCount = 0; //concurrent包的线程安全Set,用来存放每个客户端对应的MyWebSocket对象。若要实现服务端与单一客户端通信的话,可以使用Map来存放,其中Key可以为用户标识 private static CopyOnWriteArraySet<WebSocketTest> webSocketSet = new CopyOnWriteArraySet<WebSocketTest>(); //与某个客户端的连接会话,需要通过它来给客户端发送数据 private Session session; /** * 连接建立成功调用的方法 * @param session 可选的参数。session为与某个客户端的连接会话,需要通过它来给客户端发送数据 */ @OnOpen public void onOpen(Session session){ this.session = session; webSocketSet.add(this); //加入set中 addOnlineCount(); //在线数加1 System.out.println("有新连接加入!当前在线人数为" + getOnlineCount()); } /** * 连接关闭调用的方法 */ @OnClose public void onClose(){ webSocketSet.remove(this); //从set中删除 subOnlineCount(); //在线数减1 System.out.println("有一连接关闭!当前在线人数为" + getOnlineCount()); } /** * 收到客户端消息后调用的方法 * @param message 客户端发送过来的消息 * @param session 可选的参数 */ @OnMessage public void onMessage(String message, Session session) { System.out.println("来自客户端的消息:" + message); //群发消息 for(WebSocketTest item: webSocketSet){ try { item.sendMessage(message); } catch (IOException e) { e.printStackTrace(); continue; } } } /** * 发生错误时调用 * @param session * @param error */ @OnError public void onError(Session session, Throwable error){ System.out.println("发生错误"); error.printStackTrace(); } /** * 这个方法与上面几个方法不一样。没有用注解,是根据自己需要添加的方法。 * @param message * @throws IOException */ public void sendMessage(String message) throws IOException{ this.session.getBasicRemote().sendText(message+"---当前人数:"+onlineCount); //this.session.getAsyncRemote().sendText(message); } public static synchronized int getOnlineCount() { return onlineCount; } public static synchronized void addOnlineCount() { WebSocketTest.onlineCount++; } public static synchronized void subOnlineCount() { WebSocketTest.onlineCount--; } }
最近下载更多
1561361683 LV1
10月15日
人工智能4708 LV11
2023年5月8日
kkkxyh LV13
2022年7月5日
杨豫川 LV12
2022年5月11日
a1a1a2a4 LV8
2022年2月17日
xingbing LV9
2022年1月28日
hongyingit LV2
2021年12月23日
18650066502 LV12
2021年12月16日
Essencedwd LV1
2021年12月14日
是杰不是劫啊 LV6
2021年9月14日
最近浏览更多
chuxue11 LV2
11月18日
1561361683 LV1
10月15日
蓝蓝蓝说的
10月8日
暂无贡献等级
hzz2311465
10月8日
暂无贡献等级
周鸣郝 LV2
5月26日
28128觅北 LV2
5月22日
Luck_ZDM LV12
5月22日
taoyi123 LV17
4月29日
2890892945 LV2
2023年12月26日
1234567p LV1
2023年12月4日