首页>代码>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
                2024年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日
            
            
        
最近浏览更多
                
                wuyingya12     LV8
                5月23日
            
            
        
                13133117021     LV5
                2024年12月24日
            
            
        
                chuxue11     LV2
                2024年11月18日
            
            
        
                1561361683     LV1
                2024年10月15日
            
            
        
                蓝蓝蓝说的    
                2024年10月8日
            
            
                    暂无贡献等级
            
        
                hzz2311465    
                2024年10月8日
            
            
                    暂无贡献等级
            
        
                周鸣郝     LV2
                2024年5月26日
            
            
        
                28128觅北     LV2
                2024年5月22日
            
            
        
                Luck_ZDM     LV12
                2024年5月22日
            
            
        
                taoyi123     LV17
                2024年4月29日
            
            
        
    
                
                