业务流程大致是需要小程序端与服务端建立长链接,然后有多次数据交互,即:小程序发送 - 服务端接收 - 服务端发送 - 小程序接收 如此循环。
而在这个过程中,每一次的数据交互对延时要求非常高,不能超过 90ms。即小程序发送信息到小程序接收返回信息的过程不能超过 90ms,超过时间则信息的会被判断失效。
为此都分别使用过WebSocket、TCPSocket来建立长链接通信,在网络特别好(5G、WiFi)时没有问题,网络稍差点时,出错率非常高,发现都是超时导致的。注:是在发布的版本、预览调试模式时,并非真机调试模式。
在 4G 网络情况一般的环境下,通过服务器、抓包分析:
服务器在接收、处理、发送信息的过程一般用时就 4、5ms
抓包手机通信,发送、接收过程在 10ms 左右
但在小程序的 socket 中反应出来的时间就有 100+ ms,且浮动范围大,有时能达到3、400。
目前怀疑是因为在微信框架里的原因,即通信需要通过微信的服务器转发:小程序 <——> 微信 <——> 开发者服务器。
所有增加的耗时,感觉都是因为在微信官方哪儿转了一遍(估计因为要监控信息),但我不介意,关键是效率不要这么离谱行不行,或者搞个异步\开个其他线程,我收我的信息,你收集你的!!!
请官方出来解释一下哇。(抱拳~~~)
另外,也希望遇到过这种问题、有解法的大佬能不吝赐教。(抱拳~~~)
线上的吗?给个路径这边看下
https://developers.weixin.qq.com/s/A9PRqFmf7ux7
测试在微信开发者工具中,使用预览模式,在4G网络时,TCPSocket 在与后台通信时的时延
客户端与服务端不对信息做任何处理,建立TCP连接后,服务端发送任意数据,客户端响应到数据后,立即发送任意数据给服务端,服务端通过发送-接收的时间差来确定通信使用的时间。
就我们自己测试结果看
若是在用局域网IP,耗时大概在10ms;
若是用域名、使用电信4G信号,耗时波动范围大概在 100 - 400ms
使用这段代码片段进行问题复现的话,需要自己搞个TCP服务,或者用个TCP工具。
使用域名测试时,需要将端口映射到外网域名进行测试。