Linyuzai / concept

封装了一些常用组件,走过路过不要错过哦
Apache License 2.0
416 stars 122 forks source link

消息转发json转义 #34

Closed chuchushijingxi closed 7 months ago

chuchushijingxi commented 8 months ago

依赖名称: concept-websocket-loadbalance-spring-boot-starter 依赖版本: 2.3.3 问题描述: 要怎么设置websocket转发消息的编码呢,我看默认编码器会转json,现在偶尔会发生json字符串中带转义字符的情况 异常堆栈:

代码示例:

Linyuzai commented 8 months ago

可以自定义WebSocketMessageCodecAdapter来处理编码和解码,参考ServletWebSocketMessageCodecAdapter

chuchushijingxi commented 8 months ago

可以自定义WebSocketMessageCodecAdapter来处理编码和解码,参考ServletWebSocketMessageCodecAdapter

websocket多个节点之间的消息转发后,发现会给消息带上转义字符。 目前复现的情况是第一次链接正常,后面多几次链接后通过websocket转发的json消息会带转义字符了。。。

Linyuzai commented 8 months ago

可以自定义WebSocketMessageCodecAdapter来处理编码和解码,参考ServletWebSocketMessageCodecAdapter

websocket多个节点之间的消息转发后,发现会给消息带上转义字符。 目前复现的情况是第一次链接正常,后面多几次链接后通过websocket转发的json消息会带转义字符了。。。

有可以复现问题的demo吗

chuchushijingxi commented 7 months ago

可以自定义WebSocketMessageCodecAdapter来处理编码和解码,参考ServletWebSocketMessageCodecAdapter

websocket多个节点之间的消息转发后,发现会给消息带上转义字符。 目前复现的情况是第一次链接正常,后面多几次链接后通过websocket转发的json消息会带转义字符了。。。

有可以复现问题的demo吗

我直接上的生产环境了。。没有demo

Linyuzai commented 7 months ago

有原始数据吗,转发配置的什么

调用流程可以说的详细一点吗,第一次链接和多几次链接是指什么

chuchushijingxi commented 7 months ago

有原始数据吗,转发配置的什么

调用流程可以说的详细一点吗,第一次链接和多几次链接是指什么

第一次连接是指服务端和客户端进行第一次 websocket 通信,只会在集群的情况下出现

我的websocket地址类似于

是可以断开连接后继续通过这个地址重新建立连接,当第二次或多次重新连接后就会出现转义字符

配置信息

concept:
  websocket:
    type: auto
    server:
      default-endpoint:
        enabled: true
        prefix: concept-websocket
        path-selector:
          enabled: false
        user-selector:
          enabled: false
        room-selector:
          enabled: true
      message:
        retry:
          times: 0
          period: 0
      heartbeat:
        enabled: true
        period: 60000
        timeout: 210000
    load-balance:
      subscriber-master: websocket
      subscriber-slave: none
      message:
        retry:
          times: 0
          period: 0
      monitor:
        enabled: true
        period: 30000
        logger: false
      heartbeat:
        enabled: true
        period: 60000
        timeout: 210000
    executor:
      thread-pool-size: 1

这是正常的

{"from":"1754950558699139072","sdp":"v\u003d0\r\no\u003d- 2793570508788531472 2 IN IP4 127.0.0.1\r\ns\u003d-\r\nt\u003d0 0\r\na\u003dgroup:BUNDLE 0 1 2\r\na\u003dextmap-allow-mixed\r\na\u003dmsid-semantic: WMS ARDAMS\r\nm\u003daudio 9 UDP/TLS/RTP/SAVPF 111 63 9 0 8 13 110 126\r\nc\u003dIN IP4 0.0.0.0\r\na\u003drtcp:9 IN IP4 0.0.0.0\r\na\u003dice-ufrag:mjtQ\r\na\u003dice-pwd:JzipNDHoOhDECeWJuygpwxtl\r\na\u003dice-options:trickle renomination\r\na\u003dfingerprint:sha-256 99:D2:65:31:24:BF:9D:C0:EB:F1:6E:37:33:F8:27:C0:59:D6:36:51:BB:CC:4F:5E:CF:3E:60:98:E5:26:5C:89\r\na\u003dsetup:active\r\na\u003dmid:0\r\na\u003dextmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level\r\na\u003dextmap:2 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time\r\na\u003dextmap:3 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01\r\na\u003dextmap:4 urn:ietf:params:rtp-hdrext:sdes:mid\r\na\u003dsendonly\r\na\u003dmsid:ARDAMS ARDAMSa0\r\na\u003drtcp-mux\r\na\u003drtpmap:111 opus/48000/2\r\na\u003drtcp-fb:111 transport-cc\r\na\u003dfmtp:111 minptime\u003d10;useinbandfec\u003d1\r\na\u003drtpmap:63 red/48000/2\r\na\u003dfmtp:63 111/111\r\na\u003drtpmap:9 G722/8000\r\na\u003drtpmap:0 PCMU/8000\r\na\u003drtpmap:8 PCMA/8000\r\na\u003drtpmap:13 CN/8000\r\na\u003drtpmap:110 telephone-event/48000\r\na\u003drtpmap:126 telephone-event/8000\r\na\u003dssrc:3857224435 cname:1Oint1GszJ8j44Ag\r\na\u003dssrc:3857224435 msid:ARDAMS ARDAMSa0\r\nm\u003dvideo 9 UDP/TLS/RTP/SAVPF 106 116 118 107 117\r\nc\u003dIN IP4 0.0.0.0\r\na\u003drtcp:9 IN IP4 0.0.0.0\r\na\u003dice-ufrag:mjtQ\r\na\u003dice-pwd:JzipNDHoOhDECeWJuygpwxtl\r\na\u003dice-options:trickle renomination\r\na\u003dfingerprint:sha-256 99:D2:65:31:24:BF:9D:C0:EB:F1:6E:37:33:F8:27:C0:59:D6:36:51:BB:CC:4F:5E:CF:3E:60:98:E5:26:5C:89\r\na\u003dsetup:active\r\na\u003dmid:1\r\na\u003dextmap:14 urn:ietf:params:rtp-hdrext:toffset\r\na\u003dextmap:2 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time\r\na\u003dextmap:13 urn:3gpp:video-orientation\r\na\u003dextmap:3 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01\r\na\u003dextmap:5 http://www.webrtc.org/experiments/rtp-hdrext/playout-delay\r\na\u003dextmap:6 http://www.webrtc.org/experiments/rtp-hdrext/video-content-type\r\na\u003dextmap:7 http://www.webrtc.org/experiments/rtp-hdrext/video-timing\r\na\u003dextmap:8 http://www.webrtc.org/experiments/rtp-hdrext/color-space\r\na\u003dextmap:4 urn:ietf:params:rtp-hdrext:sdes:mid\r\na\u003dextmap:10 urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id\r\na\u003dextmap:11 urn:ietf:params:rtp-hdrext:sdes:repaired-rtp-stream-id\r\na\u003dsendonly\r\na\u003dmsid:ARDAMS ARDAMSv0\r\na\u003drtcp-mux\r\na\u003drtcp-rsize\r\na\u003drtpmap:106 H264/90000\r\na\u003drtcp-fb:106 goog-remb\r\na\u003drtcp-fb:106 transport-cc\r\na\u003drtcp-fb:106 ccm fir\r\na\u003drtcp-fb:106 nack\r\na\u003drtcp-fb:106 nack pli\r\na\u003dfmtp:106 level-asymmetry-allowed\u003d1;packetization-mode\u003d1;profile-level-id\u003d42e01f\r\na\u003drtpmap:116 red/90000\r\na\u003drtpmap:118 ulpfec/90000\r\na\u003drtpmap:107 rtx/90000\r\na\u003dfmtp:107 apt\u003d106\r\na\u003drtpmap:117 rtx/90000\r\na\u003dfmtp:117 apt\u003d116\r\na\u003dssrc-group:FID 1529951312 4153817892\r\na\u003dssrc:1529951312 cname:1Oint1GszJ8j44Ag\r\na\u003dssrc:1529951312 msid:ARDAMS ARDAMSv0\r\na\u003dssrc:4153817892 cname:1Oint1GszJ8j44Ag\r\na\u003dssrc:4153817892 msid:ARDAMS ARDAMSv0\r\nm\u003dapplication 9 UDP/DTLS/SCTP webrtc-datachannel\r\nc\u003dIN IP4 0.0.0.0\r\na\u003dice-ufrag:mjtQ\r\na\u003dice-pwd:JzipNDHoOhDECeWJuygpwxtl\r\na\u003dice-options:trickle renomination\r\na\u003dfingerprint:sha-256 99:D2:65:31:24:BF:9D:C0:EB:F1:6E:37:33:F8:27:C0:59:D6:36:51:BB:CC:4F:5E:CF:3E:60:98:E5:26:5C:89\r\na\u003dsetup:active\r\na\u003dmid:2\r\na\u003dsctp-port:5000\r\na\u003dmax-message-size:262144\r\n","to":"1759456413956091904","messageID":1004,"roomID":"4a35794c57fbb21471068e0006e5c0201b4cc198ca808820cdc5300473d4fcd864d5421a5634935f241adf501d2e7a97","timestamp":1708325462201,"version":1}

出现转义字符后的,看起来像是json转换了多次

{\\"from\\":\\"1752874667655475200\\",\\"messageID\\":1003,\\"roomID\\":\\"1c04f0c501a3aaae9b0538dc90c8fbd256670e557dac9f2d395a3992d9945488\\",\\"sdp\\":\\"v=0\\\\r\\\\no=- 4753660358661148395 2 IN IP4 127.0.0.1\\\\r\\\\ns=-\\\\r\\\\nt=0 0\\\\r\\\\na=group:BUNDLE 0 1 2\\\\r\\\\na=extmap-allow-mixed\\\\r\\\\na=msid-semantic: WMS\\\\r\\\\nm=audio 9 UDP/TLS/RTP/SAVPF 111 63 9 0 8 13 110 126\\\\r\\\\nc=IN IP4 0.0.0.0\\\\r\\\\na=rtcp:9 IN IP4 0.0.0.0\\\\r\\\\na=ice-ufrag:2bJ2\\\\r\\\\na=ice-pwd:Cx0ZL7b1ZS5JJQ9IMnKvs+RH\\\\r\\\\na=ice-options:trickle\\\\r\\\\na=fingerprint:sha-256 D8:3F:32:54:B3:C5:64:B7:BF:16:9C:12:E6:1C:2D:15:B5:4C:37:DF:69:03:25:75:59:C9:C9:41:22:01:9C:59\\\\r\\\\na=setup:actpass\\\\r\\\\na=mid:0\\\\r\\\\na=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level\\\\r\\\\na=extmap:2 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time\\\\r\\\\na=extmap:3 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01\\\\r\\\\na=extmap:4 urn:ietf:params:rtp-hdrext:sdes:mid\\\\r\\\\na=recvonly\\\\r\\\\na=rtcp-mux\\\\r\\\\na=rtpmap:111 opus/48000/2\\\\r\\\\na=rtcp-fb:111 transport-cc\\\\r\\\\na=fmtp:111 minptime=10;useinbandfec=1\\\\r\\\\na=rtpmap:63 red/48000/2\\\\r\\\\na=fmtp:63 111/111\\\\r\\\\na=rtpmap:9 G722/8000\\\\r\\\\na=rtpmap:0 PCMU/8000\\\\r\\\\na=rtpmap:8 PCMA/8000\\\\r\\\\na=rtpmap:13 CN/8000\\\\r\\\\na=rtpmap:110 telephone-event/48000\\\\r\\\\na=rtpmap:126 telephone-event/8000\\\\r\\\\nm=video 9 UDP/TLS/RTP/SAVPF 102 104 106 108 127 39 41 43 112 114 63 116 118 49 103 105 107 109 125 40 42 44 113 115 117\\\\r\\\\nc=IN IP4 0.0.0.0\\\\r\\\\na=rtcp:9 IN IP4 0.0.0.0\\\\r\\\\na=ice-ufrag:2bJ2\\\\r\\\\na=ice-pwd:Cx0ZL7b1ZS5JJQ9IMnKvs+RH\\\\r\\\\na=ice-options:trickle\\\\r\\\\na=fingerprint:sha-256 D8:3F:32:54:B3:C5:64:B7:BF:16:9C:12:E6:1C:2D:15:B5:4C:37:DF:69:03:25:75:59:C9:C9:41:22:01:9C:59\\\\r\\\\na=setup:actpass\\\\r\\\\na=mid:1\\\\r\\\\na=extmap:14 urn:ietf:params:rtp-hdrext:toffset\\\\r\\\\na=extmap:2 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time\\\\r\\\\na=extmap:13 urn:3gpp:video-orientation\\\\r\\\\na=extmap:3 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01\\\\r\\\\na=extmap:5 http://www.webrtc.org/experiments/rtp-hdrext/playout-delay\\\\r\\\\na=extmap:6 http://www.webrtc.org/experiments/rtp-hdrext/video-content-type\\\\r\\\\na=extmap:7 http://www.webrtc.org/experiments/rtp-hdrext/video-timing\\\\r\\\\na=extmap:8 http://www.webrtc.org/experiments/rtp-hdrext/color-space\\\\r\\\\na=extmap:4 urn:ietf:params:rtp-hdrext:sdes:mid\\\\r\\\\na=extmap:10 urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id\\\\r\\\\na=extmap:11 urn:ietf:params:rtp-hdrext:sdes:repaired-rtp-stream-id\\\\r\\\\na=recvonly\\\\r\\\\na=rtcp-mux\\\\r\\\\na=rtcp-rsize\\\\r\\\\na=rtpmap:102 H264/90000\\\\r\\\\na=rtcp-fb:102 goog-remb\\\\r\\\\na=rtcp-fb:102 transport-cc\\\\r\\\\na=rtcp-fb:102 ccm fir\\\\r\\\\na=rtcp-fb:102 nack\\\\r\\\\na=rtcp-fb:102 nack pli\\\\r\\\\na=fmtp:102 level-asymmetry-allowed=1;packetiza tion-mode=1;profile-level-id=42001f\\\\r\\\\na=rtpmap:103 rtx/90000\\\\r\\\\na=fmtp:103 apt=102\\\\r\\\\na=rtpmap:104 H264/90000\\\\r\\\\na=rtcp-fb:104 goog-remb\\\\r\\\\na=rtcp-fb:104 transport-cc\\\\r\\\\na=rtcp-fb:104 ccm fir\\\\r\\\\na=rtcp-fb:104 nack\\\\r\\\\na=rtcp-fb:104 nack pli\\\\r\\\\na=fmtp:104 level-asymmetry-allowed=1;packetization-mode=0;profile-level-id=42001f\\\\r\\\\na=rtpmap:105 rtx/90000\\\\r\\\\na=fmtp:105 apt=104\\\\r\\\\na=rtpmap:106 H264/90000\\\\r\\\\na=rtcp-fb:106 goog-remb\\\\r\\\\na=rtcp-fb:106 transport-cc\\\\r\\\\na=rtcp-fb:106 ccm fir\\\\r\\\\na=rtcp-fb:106 nack\\\\r\\\\na=rtcp-fb:106 nack pli\\\\r\\\\na=fmtp:106 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f\\\\r\\\\na=rtpmap:107 rtx/90000\\\\r\\\\na=fmtp:107 apt=106\\\\r\\\\na=rtpmap:108 H264/90000\\\\r\\\\na=rtcp-fb:108 goog-remb\\\\r\\\\na=rtcp-fb:108 transport-cc\\\\r\\\\na=rtcp-fb:108 ccm fir\\\\r\\\\na=rtcp-fb:108 nack\\\\r\\\\na=rtcp-fb:108 nack pli\\\\r\\\\na=fmtp:108 level-asymmetry-allowed=1;packetization-mode=0;profile-level-id=42e01f\\\\r\\\\na=rtpmap:109 rtx/90000\\\\r\\\\na=fmtp:109 apt=108\\\\r\\\\na=rtpmap:127 H264/90000\\\\r\\\\na=rtcp-fb:127 goog-remb\\\\r\\\\na=rtcp-fb:127 transport-cc\\\\r\\\\na=rtcp-fb:127 ccm fir\\\\r\\\\na=rtcp-fb:127 nack\\\\r\\\\na=rtcp-fb:127 nack pli\\\\r\\\\na=fmtp:127 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=4d001f\\\\r\\\\na=rtpmap:125 rtx/90000\\\\r\\\\na=fmtp:1
chuchushijingxi commented 7 months ago

有原始数据吗,转发配置的什么

调用流程可以说的详细一点吗,第一次链接和多几次链接是指什么

我的服务相当于一个中间商

我会给 A、B 两个服务提供 websocket 连接,A 和 B 会同时建立连接 我所做的就是给 A 发送的消息转发给 B,B 发送的消息转发给 A

Linyuzai commented 7 months ago

有原始数据吗,转发配置的什么 调用流程可以说的详细一点吗,第一次链接和多几次链接是指什么

我的服务相当于一个中间商

我会给 A、B 两个服务提供 websocket 连接,A 和 B 会同时建立连接 我所做的就是给 A 发送的消息转发给 B,B 发送的消息转发给 A

就是说你的服务是个集群,A和B会连上你的ws,你收到A的消息就转发给B,收到B的消息就转发给A

chuchushijingxi commented 7 months ago

有原始数据吗,转发配置的什么 调用流程可以说的详细一点吗,第一次链接和多几次链接是指什么

我的服务相当于一个中间商 我会给 A、B 两个服务提供 websocket 连接,A 和 B 会同时建立连接 我所做的就是给 A 发送的消息转发给 B,B 发送的消息转发给 A

就是说你的服务是个集群,A和B会连上你的ws,你收到A的消息就转发给B,收到B的消息就转发给A

嗯嗯,A 和 B 可以看作是两个用户,因为可能通过 nginx 代理后,他俩连上了不同机器的 websocket 在转发的过程中我会根据收到的消息封装新的消息结构转发 比方说 A 发送一条 messageId 为 1001 的消息,我会重新封装一个 messageId 为 1002 的消息通过

concept.send(new RoomMessage(jsonStr, roomId + ClientTypeEnum.CLIENT_TYPE.getType()));

进行发送

Linyuzai commented 7 months ago

升级到2.4.0试一下

chuchushijingxi commented 7 months ago

升级到2.4.0试一下

这个是什么问题导致的呀

Linyuzai commented 7 months ago

升级到2.4.0试一下

这个是什么问题导致的呀

支持byte[]消息之后,处理消息解析的一个bug

chuchushijingxi commented 7 months ago

升级到2.4.0试一下

这个是什么问题导致的呀

支持byte[]消息之后,处理消息解析的一个bug

太强了,已经解决了,谢谢大佬