Protocal p = ProtocalFactory.createCommonData( // dataContent的内容 msg , "0", touserId, true, Protocal.genFingerPrint() // 注意:跟对访客的反馈用的同一个类型id , -1); try { GlobalSendHelper.sendDataS2C(ChatServerRunner.sli.getServerCoreHandler().getBridgeProcessor(), p, new MBObserver() { @Override public void update(boolean sucess, Object extraObj) { if (sucess) log.info("数据已成功发出!"); else log.error("数据发送失败。错误码是:" + extraObj + "!"); } } ); } catch (Exception e) { log.error(e.getMessage(), e); }
2023-04-07 11:44:12.296 LOG_WARN 26536 --- [ Timer-3] n.x.m.server.qos.QoS4SendDaemonRoot : 【IMCORE-本机QoS】【QoS发送方】指纹为bf924b67-d9d1-4893-8de1-c20bc4267d97的消息已成功从发送质量保证队列中移除(可能是收到接收方的应答也可能是达到了重传的次数上限),重试次数=1 2023-04-07 11:44:12.296 LOG_INFO 26536 --- [ Timer-3] .b.m.i.s.s.MessageQoSEventS2CListnerImpl : 【DEBUG_QoS_S2C事件】收到系统的未实时送达事件通知,当前共有1个包QoS保证机制结束,判定为【无法实时送达】!
接收到消息: {bridge: false, type: 2, dataContent: "测试数据", from: "0", to: "1205399100998275073", …} QoS: true bridge: false dataContent: "测试数据" fp: "bf924b67-d9d1-4893-8de1-c20bc4267d97" from: "0" sm: 1680839045214 to: "1205399100998275073" type: 2 typeu: -1 __proto__: Object vendor.js?t=wechat&s…e33ba5d642aaa:54746 接收到消息: {bridge: false, type: 2, dataContent: "测试数据", from: "0", to: "1205399100998275073", …} QoS: true bridge: false dataContent: "测试数据" fp: "bf924b67-d9d1-4893-8de1-c20bc4267d97" from: "0" sm: 1680839047306 to: "1205399100998275073" type: 2 typeu: -1
来源:即时通讯网 - 即时通讯开发者社区!
轻量级开源移动端即时通讯框架。
快速入门 / 性能 / 指南 / 提问
轻量级Web端即时通讯框架。
详细介绍 / 精编源码 / 手册教程
移动端实时音视频框架。
详细介绍 / 性能测试 / 安装体验
基于MobileIMSDK的移动IM系统。
详细介绍 / 产品截图 / 安装体验
一套产品级Web端IM系统。
详细介绍 / 产品截图 / 演示视频
引用此评论
@PostMapping(value = "/sendMsg") @ApiOperation(value = "发送消息") public Result getUserIdFromChannel(@RequestParam String touserId, @RequestParam String msg) throws Exception { Protocal p = ProtocalFactory.createCommonData( // dataContent的内容 msg , "0", touserId, true, Protocal.genFingerPrint() // 注意:跟对访客的反馈用的同一个类型id , -1); try { GlobalSendHelper.sendDataS2C(ChatServerRunner.sli.getServerCoreHandler().getBridgeProcessor(), p, new MBObserver() { @Override public void update(boolean sucess, Object extraObj) { if (sucess) log.info("数据已成功发出!"); else log.error("数据发送失败。错误码是:" + extraObj + "!"); } } ); } catch (Exception e) { log.error(e.getMessage(), e); } return Result.Ok(); }
引用:haiyabtx 发表于 2023-04-07 12:02 客户端 就是 html 的 webSocket
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html> <head> <meta charset="utf-8"/> <title>CIM Webclient for protobuf</title> <script type="text/javascript" src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.min.js"></script> <script type="text/javascript" src="websocket.js"></script> </head> <script> $(document).ready(function(){ var websocket = null // 判断当前环境是否支持Websocket if (window.WebSocket) { if (!websocket) { const ws = 'ws://127.0.0.1:3000/websocket' websocket = new WebSocket(ws) } else { console.log('not support websocket') } // 连接成功建立得回调方法 websocket.onopen = function(e) { heartCheck.reset().start() // 成功建立连接后,重置心跳检测 var PLoginInfo = { "loginUserId": "admin" }; var message= { "type": 0, "dataContent":JSON.stringify(PLoginInfo) }; websocket.send(JSON.stringify(message)); // 连接成功将消息传给服务端 console.log('connected successfully') } // 连接发生错误 会继续尝试发生新得连接 5次 websocket.onerror = function() { console.log('onerror连接发生错误') websocketConnectdCount++ if (websocketConnectdCount <= 5) { newWebsocket() } } // 连接到消息得回调方法 websocket.onmessage = function(e) { // console.log('接受到消息了', e) var data = JSON.parse(e.data); if (data.type != 51) { console.log("接收到消息:", data); } heartCheck.reset().start() // 如果获取到消息,说明连接是正常的,重置心跳检测 } // 接受到服务端关闭连接时的回调方法 websocket.onclose = function() { console.log('onclose断开连接') } // 监听窗口事件 窗口关闭 主动断开连接 window.onbeforeunload = function() { websocket.close() } // 心跳检测, 每隔一段时间检测连接状态,如果处于连接中, // 就向server端主动发送消息,来重置server端与客户端的最大连接时间,如果已经断开了,发起重连。 var heartCheck = { timeout: 5000, // 5分钟发一次心跳,比server端设置的连接时间稍微小一点,在接近断开的情况下以通信的方式去重置连接时间。 timeoutObj: null, serverTimeoutObj: null, reset: function() { clearTimeout(this.timeoutObj) clearTimeout(this.serverTimeoutObj) return this }, start: function() { this.serverTimeoutObj = setInterval(function() { if (websocket.readyState === 1) { console.log('连接状态,发送消息保持连接') var PLoginInfo = { "loginUserId": "admin" }; var message= { "type": 1, "dataContent":JSON.stringify(PLoginInfo) }; websocket.send(JSON.stringify(message)) // 连接成功将消息传给服务端 heartCheck.reset().start() // 如果获得消息 说明连接正常 重置心跳检测 } else { console.log('断开连接, 尝试重连') newWebsocket() } }, this.timeout) } } } }); /***********************************业务配置结束**************************/ </script> <body style="width: 600px;"> <div id="output"></div> </body> </html>
引用:haiyabtx 发表于 2023-04-07 12:37 有打印 数据已成功发出 只执行了一次 webSocket 对 webSocket 发数据 也是一样会两次
精华主题数超过100个。
连续任职达2年以上的合格正式版主
为论区做出突出贡献的开发者、版主等。
Copyright © 2014-2024 即时通讯网 - 即时通讯开发者社区 / 版本 V4.4
苏州网际时代信息科技有限公司 (苏ICP备16005070号-1)
Processed in 0.125000 second(s), 40 queries , Gzip On.