V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
edis0n0
V2EX  ›  程序员

2G 弱网,可接受 3~5 秒延迟, HTTP 每秒轮询 和 WebSocket 断线立即重连 哪个稳定性更好一些?

  •  
  •   edis0n0 · 2022-12-15 00:11:12 +08:00 · 3140 次点击
    这是一个创建于 738 天前的主题,其中的信息可能已经有所发展或是发生改变。

    传输内容是一些文本(每分钟数据量在 1KB 左右),和一些图片(平均大小 80KB 左右,如果用 WS 的话应该要传链接走 HTTP 下载以免堵塞 WS )

    24 条回复    2022-12-16 12:07:40 +08:00
    DefoliationM
        1
    DefoliationM  
       2022-12-15 00:22:12 +08:00
    WebSocket 吧,http 可能还要重新进行 tcp 三次握手。
    edis0n0
        2
    edis0n0  
    OP
       2022-12-15 00:28:54 +08:00
    原始需求是服务器推送指令,部分指令客户端需要向服务器上传 80KB 左右的返回数据(二进制)
    因为弱网,用的是简单对称加密,无 TLS
    edis0n0
        3
    edis0n0  
    OP
       2022-12-15 00:31:15 +08:00
    延迟不敏感,5 秒以内都可以,稳定性比较重要(不能出现掉线 1 分钟客户端才检测到,然后才开始重连的情况)
    wwbfred
        4
    wwbfred  
       2022-12-15 00:35:11 +08:00 via iPhone
    简单想了下,除非 HTTP 轮询每次都重新握手,否则应该差不多,建议用 ws 。
    edis0n0
        5
    edis0n0  
    OP
       2022-12-15 00:36:34 +08:00
    @wwbfred #4 ws 有没有可能出现连接断开客户端过很久才检测到的情况?
    tyzandhr
        6
    tyzandhr  
       2022-12-15 01:02:30 +08:00 via Android
    冒昧问下,为什么不本地分包后用 udp 发,服务端做个校验呢?节省掉握手时间。_(:з」∠)_
    edis0n0
        7
    edis0n0  
    OP
       2022-12-15 01:18:49 +08:00
    @tyzandhr #6 因为需要自己处理丢包之类的问题,怕弄不清楚
    tyzandhr
        8
    tyzandhr  
       2022-12-15 01:22:06 +08:00 via Android
    @edis0n0 既然只是怕麻烦,那就用 ws 好了
    wwbfred
        9
    wwbfred  
       2022-12-15 01:27:54 +08:00
    @edis0n0 链路中断除非到下一次数据包 /心跳包发送的时候才能检测到,在此之前任何协议都无法检测到。
    而正常的挥手任何一个设计合理的协议都是可以感知的,不存在很久后才能检测到的问题。
    userdhf
        10
    userdhf  
       2022-12-15 02:03:41 +08:00
    盲猜是监控...
    xsen
        11
    xsen  
       2022-12-15 08:09:16 +08:00
    小包传输,重连+断点续传

    传输成不管是 http ,还是 websocket ,或者 tcp 或 udp 都差距不会很大
    xsen
        12
    xsen  
       2022-12-15 08:09:51 +08:00
    1-2s 一个心跳检测通讯状况
    CyJaySong
        13
    CyJaySong  
       2022-12-15 08:59:31 +08:00
    MQTT 了解一下?
    cheng6563
        14
    cheng6563  
       2022-12-15 09:20:02 +08:00
    客户端不是浏览器不如用 MQTT
    winglight2016
        15
    winglight2016  
       2022-12-15 09:29:13 +08:00
    @CyJaySong 的确,物联网协议那么多,何必自己发明轮子
    SmiteChow
        16
    SmiteChow  
       2022-12-15 09:39:57 +08:00
    MQTT over WebSockets
    Twan
        17
    Twan  
       2022-12-15 09:41:03 +08:00
    UDP
    newmlp
        18
    newmlp  
       2022-12-15 11:09:32 +08:00
    http3
    superliy
        19
    superliy  
       2022-12-15 11:32:09 +08:00
    ws 有没有可能出现连接断开客户端过很久才检测到的情况?


    有没有断开连接 要自己通过心跳保证的,比如两秒中发一个 byte ,服务端立即回复,两次收不到回复就认为是断开的
    luny
        20
    luny  
       2022-12-15 11:45:20 +08:00
    2G ,被运营商限制,现在基本都没有流量了,可以实测一下,估计几个字节都难
    anviod
        21
    anviod  
       2022-12-15 13:06:48 +08:00
    为啥不用 NBIoT 或者 cat 网络 做物联网产品吗? 稳定的一批
    tmumu
        22
    tmumu  
       2022-12-15 13:14:19 +08:00
    13 楼正解,mqtt 或者 ws
    opengps
        23
    opengps  
       2022-12-16 09:37:52 +08:00
    弱网 WebSocket 好很多,http 光包头信息就占了那么多,甚至更推荐原生 socket 去 udp 发数据
    patrickyoung
        24
    patrickyoung  
       2022-12-16 12:07:40 +08:00 via iPhone
    MQTT
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2510 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 15:39 · PVG 23:39 · LAX 07:39 · JFK 10:39
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.