V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
reid2017
V2EX  ›  程序员

websocket 通信如何保证/确认客户端收到了消息

  •  
  •   reid2017 · 2018-02-28 10:58:17 +08:00 · 7445 次点击
    这是一个创建于 2264 天前的主题,其中的信息可能已经有所发展或是发生改变。

    如题,服务器发送消息后,如何知道客户端成功接收到了消息?有什么机制吗?

    9 条回复    2018-02-28 15:08:09 +08:00
    scriptB0y
        1
    scriptB0y  
       2018-02-28 11:03:57 +08:00 via iPhone
    websocket 是在 tcp 上面的,我觉得可以放心认为发出去的消息一定会被客户端收到吧。

    我记得 wensocket 一端发给另一端发不过去会报错的
    BBCCBB
        2
    BBCCBB  
       2018-02-28 11:06:54 +08:00
    加一个确认机制,客户端处理完成之后发送一个确认消息.
    yonglanyouyou
        3
    yonglanyouyou  
       2018-02-28 11:28:23 +08:00
    应用层加 ack
    ghiei9101
        4
    ghiei9101  
       2018-02-28 12:12:55 +08:00
    有种机制 叫回执
    pathbox
        5
    pathbox  
       2018-02-28 12:15:49 +08:00 via iPhone
    同楼上,如果你想自己控制,在应用层知道,可以自己加 ack 机制,但这个机制不要太复杂
    skadi
        6
    skadi  
       2018-02-28 12:19:37 +08:00
    server -> msg+Hash -> client 然后 client->Hash->server
    跟楼上的 ack,回执 什么的都是一个意思.
    ioth
        7
    ioth  
       2018-02-28 12:22:22 +08:00
    websocket 协议,只是保证阻塞的解决,其它在上一层解决。
    封包、tcp/udp
    reid2017
        8
    reid2017  
    OP
       2018-02-28 13:17:03 +08:00
    多谢各位,看来只能自己去实现 ack 了
    phy25
        9
    phy25  
       2018-02-28 15:08:09 +08:00 via Android
    https://stackoverflow.com/questions/23238319/websockets-ping-pong-why-not-tcp-keepalive
    以及相关问题,结论是应用层做连接检查比较好。
    学到一点:不能只依靠 TCP 的特性来判断服务器到客户端的连接。因为有经过代理的情况,而且可能得等到客户端默认的 TCP 超时时间(比较长)才能检测到连接丢失。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1006 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 20:13 · PVG 04:13 · LAX 13:13 · JFK 16:13
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.