当前位置: 首页 > article >正文

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"  :标识这是移动端

http://www.kler.cn/a/307358.html

相关文章:

  • 「Mac玩转仓颉内测版12」PTA刷题篇3 - L1-003 个位数统计
  • 自由学习记录(21)
  • 01:(手撸HAL+CubeMX)时钟篇
  • Postman上传图片如何处理
  • @ComponentScan:Spring Boot中的自动装配大师
  • 微擎框架php7.4使用phpexcel导出数据报错修复
  • PostgreSQL的查看主从同步状态
  • 凸优化学习(3)——对偶方法、KKT条件、ADMM
  • 「C++系列」文件和流
  • 医学数据分析实训 项目四回归分析--预测帕金森病病情的严重程度
  • Java设计模式—面向对象设计原则(二) --------> 里氏代换原则 LSP (完整详解,附有代码+案列)
  • Linux 系统盘空间不足,想要将 Docker 镜像和容器数据迁移到数据盘
  • sqlgun靶场攻略
  • Mysql系列-索引简介
  • Vert.x HttpClient调用后端服务时使用Idle Timeout和KeepAlive Timeout的行为分析
  • 11.java面向对象
  • macOS上谷歌浏览器的十大隐藏功能
  • c语言中的常量定义(补充)
  • 【兼容性记录】video标签在 IOS 和 安卓中的问题
  • 队列-------
  • 英语学习交流平台|基于java的英语学习交流平台系统小程序(源码+数据库+文档)
  • EP12 分类列表元素点击跳转
  • 【云原生监控】Prometheus之PushGateway
  • 机器学习的入门指南
  • JVM HotSpot 虚拟机: 对象的创建, 内存布局和访问定位
  • Oracle数据库中的归档日志(Archive Log)详解与应用