栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Spring 基于websocket 的推送接收消息

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Spring 基于websocket 的推送接收消息

Spring 基于websocket 的推送接收消息 创建后端服务类,通过ServerEndPoint注解将类注解为服务端
package com.erdp.service;

import javax.mail.Session;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

@ServerEndPoint(value = "/websocket/message/{userId}")
public class MessageServer {
    private static Map clients = new ConcurrentHashMap<>();
    private Session session;
    private String userId;
    private static Map> userAndSessions = new ConcurrentHashMap<>();
    @OnOpen
    public void onOpen(@PathParam("userId")String userId,Session session){
        this.session = session;
        this.userId = userId;
        String sessionId = session.getId();
        clients.put(sessionId,this);
        List list = userAndSessions.get(userId);
        if(list == null){
            list = new ArrayList<>();
        }
        list.add(sessionId);
        userAndSessions.put(userId,list);
    }
    @OnClose
    public void onClose(){
        clients.remove(session.getId());
        List list = userAndSessions.get(userId);
        list.remove(session.getId());
        if(list.size() == 0){
            userAndSessions.remove(userId);
        }
    }
    @OnError
    public void OnError(Session session,Throwable t){
        t.printStackTrace();
    }
    @OnMessage
    public void OnMessage(String userName,String text){
        sendMessageTo(userName,text);
    }
    public static void sendMessageTo(String userName,String text){
        Listlist = userAndSessions.get(userName);
        if(list == null){
            return;
        }for(String sessionId:list){
            MessageServer messageServer = clients.get(sessionId);
            sendMessage(messageServer,text);
        }
    }

    private static void sendMessage(MessageServer messageServer,String message){
        if (messageServer != null){
            messageServer.session.getAsyncRemote().sendText(message);
        }
    }
}

前端客户端调用
layui.use(['jquery','layui'],function(){
   var layer  = layui.layer;
   $(function () {
        var websocket = null;
        if('WebSocket' in window){
            websocket = new WebSocket('/websocket/message/{userId}')
            websocket.onmessage = function(e) {
                o = false;
                if(timeout){
                    loginOut();
                }
            }
            websocket.onclose = function() {
                loginOut();
            }
            websocket.onmessage = function(ev) {
                var data = ev.data.replace(new RegExp("n","gm"),"")
                var activeInfo = JSON.parse(data);
            }
        }
    })
});
调用方式
package com.erdp.service;
public class PasuController {
    MessageServer.sendMessageTo("userId","具体发送的消息内容");
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1023249.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号