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

2019-08-14 10:52:13 +08:00
 Bakarua

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

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

2406 次点击
所在节点    问与答
13 条回复
qilishasha
2019-08-14 11:16:52 +08:00
就是存数据库的,存内存才有隐患
momocraft
2019-08-14 11:18:46 +08:00
自己维护同步状态,比如 seq no / timestamp

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

我们是这样设计的

会话:会话 ID,用户 ID... (每个会话的基本信息,参与人之类的)
消息:消息 ID,用户 ID,消息类型+内容 (统一保存消息)
会话_消息:用户 ID,会话 ID,消息 ID,时间 (谁什么时候在哪个会话发了消息)
用户_会话:用户 ID,会话 ID,最新消息 ID,已读消息 ID,未读消息数 (用户在每个会话中的状态)
yuting0501
2019-08-14 12:22:19 +08:00
看成向脱发用户发送,不好意思歪楼了,你们继续。。
mritd
2019-08-14 13:03:41 +08:00
@yuting0501 #5 我也是 😂
sneezry
2019-08-14 13:17:27 +08:00
用 MQTT over websocket,这个需求协议本身能帮你实现
liuzhen
2019-08-14 15:41:43 +08:00
就你自己说的方式,不实时落地文件就好了,放在内存或队列里定时落地
frozenshadow
2019-08-14 21:18:26 +08:00
@sneezry 没有建立过连接的用户不行吧
Bakarua
2019-08-15 10:22:20 +08:00
@momocraft 好像不能私自保存用户的聊天记录吧
Bakarua
2019-08-15 10:25:49 +08:00
@sneezry 没用过欸,看了一下阿里的 mqtt 收费好像不便宜...小程序 没打算投入那么多
Bakarua
2019-08-15 10:29:32 +08:00
@pubby 已经解决啦 发给不在线的用户的信息用 redis 做缓存 等用户连接上 websocket 去 redis 里根据用户 id 匹配该未接收的消息 然后推送给他
Bakarua
2019-08-15 10:44:07 +08:00
@yuting0501 能定向脱发用户推送信息 那市场肯定很大

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/591749

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX