请教各位大佬一个头疼的问题,由于一些历史原因,我们公司做的测试系统是用 django 做的 web 程序,最近需要做数据实时监控,但是基于 channels 的 websocket 的数据推送延迟有 20ms,数据源的数据大概 10ms,所以推送不及时数据会堆积造成延迟,实际上浏览器和 django 都是本地运行的,想问下大佬们有没有什么途径可以避开 websocket
1
JeromeCui 2020-12-01 19:24:20 +08:00
为什么会有 20ms 的延迟?
|
2
huyudong1991 OP 实际测出来的调用时间,大概是 python 后端+tcp 连接的锅
|
3
DoctorCat 2020-12-01 19:47:38 +08:00
感觉可能是 websocket 使用不当造成的。如果 ws 都不行,那么基于 HTTP 就没有更好的方法了。
|
4
Austaras 2020-12-01 19:52:42 +08:00
server side event,这个麻烦
webrtc,这个更麻烦 轮询或者长链接,这个八成比 ws 延迟更高 你试试看一次发多组数据呗反正人眼看不出几十毫秒的区别 |
5
assiadamo 2020-12-01 19:56:33 +08:00
webrtc 其实还好
可不可以用一些比较轻量的队列呢?比如 mqtt |
6
thtznet 2020-12-01 20:01:32 +08:00
SignalR 了解一下
|
7
huyudong1991 OP @thtznet 貌似兼容 ws,应该不会有本质区别吧
|
8
huyudong1991 OP @DoctorCat 不太清楚原因,回头找个干净的环境正经测一下
|
9
huyudong1991 OP @Austaras 现在确实是打算一次多发哈哈
|
10
thtznet 2020-12-01 21:04:29 +08:00
@huyudong1991 SignalR 和 我们自己实现 webrtc 的核心区别就是,微软的工程师比大部分的"我们"牛,大牛封装过的东西,可能不是最顶级的,但下限是有保证的。毕竟大部分的“我们”只是普通的工程师,混口饭吃罢了。
|
11
Bijiabo 2020-12-01 21:36:25 +08:00 via iPhone
我前两天也有类似的场景,间隔很巧也是 10ms 左右,看现象是浏览器接收 websocket 效率达不到这么高。特别是短时间内频繁操作。
建议楼主写个浏览器外运行的脚本来收消息看下延迟,对比一下 |
12
Austaras 2020-12-01 23:05:33 +08:00
不是,浏览器渲染一帧就要 1/60s,10 20ms 的延迟很关键吗?一般来说 100ms 一下的延迟是看都看不见的
|
13
tairan2006 2020-12-02 00:02:39 +08:00 via Android
10ms 不是应该考虑网速的影响么。。量级太低了
|
14
ahsjs 2020-12-02 09:00:06 +08:00
http2
|
15
no1xsyzy 2020-12-02 10:22:03 +08:00
让我理解下,数据流是这样的
某上游 --> 你的 Django --> 用户浏览器 上游发送数据每 10ms 发送一次 用户浏览器每 20ms 接受一次(串行) 从而导致消息在你的 Django 上积压 那么结果很明显,方法有两个: 1. 丢弃用户侧未能及时接受的数据 2. 用户侧一次发送不止一份数据 @Austaras 1/60s 不是 16ms 么? |
16
ardenchan 2020-12-02 11:28:08 +08:00
根据楼上老哥的思路,服务器端给他睡眠个 10ms
完美解决[手动狗头] |
17
anaf 2020-12-11 00:22:37 +08:00
sse 单项通信
|