websocket消息推送修改

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"  :标识这是移动端
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值