websocket简单使用

复制代码
@ServerEndpoint(value = "/datatrans/socketServer/{datatransSocket}")
@Component
public class SocketServer {

    private Session session;

    private static Map<String, Session> sessionPool = new ConcurrentHashMap<>();
    private static Map<String, String> sessionIds = new ConcurrentHashMap<>();

    public SocketServer() {
    }

    @OnOpen
    public void open(Session session, @PathParam(value = "datatransSocket") String datatransSocket) {
        this.session = session;
        sessionPool.put(datatransSocket, session);
        sessionIds.put(session.getId(), datatransSocket);
        System.out.println("websocket-成功");
    }

    @OnMessage
    public void onMessage(String message) {
        System.out.println("当前发送人sessionid为" + session.getId() + "发送内容为" + message);
    }

    @OnClose
    public void onClose() {
        sessionPool.remove(sessionIds.get(session.getId()));
        sessionIds.remove(session.getId());
    }

    @OnError
    public void onError(Session session, Throwable error) {
        error.printStackTrace();
    }

    public void sendMessage( String message) {
        Session session = sessionPool.get("datatransSocket");
        if (session == null) {
            return;
        }
        synchronized (session) {
            if (session != null) {
                try {
                    session.getBasicRemote().sendText(message);
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    public static int getOnlineNum() {
        return sessionPool.size();
    }

    public String getOnlineTUsers() {
        StringBuilder TUsers = new StringBuilder();
        for (String key : sessionIds.keySet()) {
            TUsers.append(sessionIds.get(key)).append("---------");
        }
        return TUsers.toString();
    }

    public void sendAll(String msg) {
        //for (String key : sessionIds.keySet()) {
        //    sendMessage(sessionIds.get(key), msg);
        //}
        sendMessage(msg);
    }

    public void sendMany(String msg, String[] persons) {
        for (String TUserid : persons) {
            sendMessage(msg);
        }
    }
}
SocketServer
复制代码

 

posted @   怡安  阅读(175)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
点击右上角即可分享
微信分享提示