WebSocket支持同时给app端和pc端发送消息 #### (1) WebSocket操作类 > 通过修改该类WebSocket可以进行同一用户多端的消息推送 ``` @Component @Slf4j @ServerEndpoint("/websocket/{userId}") public class WebSocket { //省略部分代码 //1.增加app端标识 private String APP_SESSION_SUFFIX = "_app"; // 2.修改单点消息方法 public void sendOneMessage(String userId, String message) { Session session = sessionPool.get(userId); if (session != null&&session.isOpen()) { try { log.info("【websocket消息】 单点消息:"+message); session.getAsyncRemote().sendText(message); } catch (Exception e) { e.printStackTrace(); } } //--------3.增加APP端消息推送-------- Session session_app = sessionPool.get(userId+APP_SESSION_SUFFIX ); if (session_app != null&&session_app .isOpen()) { try { log.info("【websocket移动端消息】 单点消息:"+message); session_app .getAsyncRemote().sendText(message); } catch (Exception e) { e.printStackTrace(); } } } //省略部分代码 //------其他类似方法修改同上---------- } ``` ### 前端uniapp中使用WebSocket ``` <script> //引用socket.js import socket from '@/common/js-sdk/socket/socket.js' export default { data() { return { } }, mounted() { //初始化websocket this.onSocketOpen() this.onSocketReceive() }, destroyed: function () { // 离开页面生命周期函数 socket.closeSocket() }, methods: { onSocketOpen: function () { // WebSocket与普通的请求所用协议有所不同,ws等同于http,wss等同于https socket.init('websocket'); //对应要连接的socket }, onSocketReceive: function () { var _this=this socket.acceptMessage = function(res){ // console.log("页面收到的消息", res); if(res.cmd == "topic"){ //系统通知 }else if(res.cmd == "user"){ //用户消息 } else if(res.cmd == 'email'){ //邮件消息 } } } } } </script> ``` socket.js连接url部分代码修改 ``` init(socket_type,callback) { //省略部分代码 let url=this.socketUrl.replace("https://","wss://").replace("http://","ws://") +"/"+socket_type+"/"+store.state.userid+"_app"; //省略部分代码 } //相关参数 socketUrl :对应api地址 socket_type :对应你要连接的是哪个websocket "_app" :标识这是移动端 ```