V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
Bakarua
V2EX  ›  问与答

websocket 如何处理向脱机用户发送消息

  •  
  •   Bakarua · 2019-08-14 10:52:13 +08:00 · 2457 次点击
    这是一个创建于 1928 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近做微信小程序有用到 websocket...有个一对一的聊天功能,如果有一方 websocket 处于脱机状态( websocket closed ),如何保证在他下次连接 websocket 时能接收到另一端发来的信息?

    有想过将聊天记录存放在文件中数然后数据库记录文件地址,通过对文件的读写来记录聊天信息,在用户重连 websocket 时将聊天记录读取出来,但是这样频繁读写文件会不会有隐患?

    13 条回复    2019-08-15 10:44:07 +08:00
    qilishasha
        1
    qilishasha  
       2019-08-14 11:16:52 +08:00
    就是存数据库的,存内存才有隐患
    momocraft
        2
    momocraft  
       2019-08-14 11:18:46 +08:00   ❤️ 1
    自己维护同步状态,比如 seq no / timestamp

    不过在国内不自己留一份聊天记录是合法的吗?
    nnnToTnnn
        3
    nnnToTnnn  
       2019-08-14 11:19:33 +08:00
    消息队列 mq
    pubby
        4
    pubby  
       2019-08-14 11:20:59 +08:00   ❤️ 1
    刚做过一个

    我们是这样设计的

    会话:会话 ID,用户 ID... (每个会话的基本信息,参与人之类的)
    消息:消息 ID,用户 ID,消息类型+内容 (统一保存消息)
    会话_消息:用户 ID,会话 ID,消息 ID,时间 (谁什么时候在哪个会话发了消息)
    用户_会话:用户 ID,会话 ID,最新消息 ID,已读消息 ID,未读消息数 (用户在每个会话中的状态)
    yuting0501
        5
    yuting0501  
       2019-08-14 12:22:19 +08:00 via iPhone   ❤️ 1
    看成向脱发用户发送,不好意思歪楼了,你们继续。。
    mritd
        6
    mritd  
       2019-08-14 13:03:41 +08:00 via iPhone
    @yuting0501 #5 我也是 😂
    sneezry
        7
    sneezry  
       2019-08-14 13:17:27 +08:00 via iPhone
    用 MQTT over websocket,这个需求协议本身能帮你实现
    liuzhen
        8
    liuzhen  
       2019-08-14 15:41:43 +08:00
    就你自己说的方式,不实时落地文件就好了,放在内存或队列里定时落地
    frozenshadow
        9
    frozenshadow  
       2019-08-14 21:18:26 +08:00 via Android
    @sneezry 没有建立过连接的用户不行吧
    Bakarua
        10
    Bakarua  
    OP
       2019-08-15 10:22:20 +08:00
    @momocraft 好像不能私自保存用户的聊天记录吧
    Bakarua
        11
    Bakarua  
    OP
       2019-08-15 10:25:49 +08:00
    @sneezry 没用过欸,看了一下阿里的 mqtt 收费好像不便宜...小程序 没打算投入那么多
    Bakarua
        12
    Bakarua  
    OP
       2019-08-15 10:29:32 +08:00
    @pubby 已经解决啦 发给不在线的用户的信息用 redis 做缓存 等用户连接上 websocket 去 redis 里根据用户 id 匹配该未接收的消息 然后推送给他
    Bakarua
        13
    Bakarua  
    OP
       2019-08-15 10:44:07 +08:00
    @yuting0501 能定向脱发用户推送信息 那市场肯定很大
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   992 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 19:45 · PVG 03:45 · LAX 11:45 · JFK 14:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.