请教各位大佬一个头疼的问题,由于一些历史原因,我们公司做的测试系统是用 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 单项通信 |