最近做微信小程序有用到 websocket...有个一对一的聊天功能,如果有一方 websocket 处于脱机状态( websocket closed ),如何保证在他下次连接 websocket 时能接收到另一端发来的信息?
有想过将聊天记录存放在文件中数然后数据库记录文件地址,通过对文件的读写来记录聊天信息,在用户重连 websocket 时将聊天记录读取出来,但是这样频繁读写文件会不会有隐患?
1
qilishasha 2019-08-14 11:16:52 +08:00
就是存数据库的,存内存才有隐患
|
2
momocraft 2019-08-14 11:18:46 +08:00 1
自己维护同步状态,比如 seq no / timestamp
不过在国内不自己留一份聊天记录是合法的吗? |
3
nnnToTnnn 2019-08-14 11:19:33 +08:00
消息队列 mq
|
4
pubby 2019-08-14 11:20:59 +08:00 1
刚做过一个
我们是这样设计的 会话:会话 ID,用户 ID... (每个会话的基本信息,参与人之类的) 消息:消息 ID,用户 ID,消息类型+内容 (统一保存消息) 会话_消息:用户 ID,会话 ID,消息 ID,时间 (谁什么时候在哪个会话发了消息) 用户_会话:用户 ID,会话 ID,最新消息 ID,已读消息 ID,未读消息数 (用户在每个会话中的状态) |
5
yuting0501 2019-08-14 12:22:19 +08:00 via iPhone 1
看成向脱发用户发送,不好意思歪楼了,你们继续。。
|
6
mritd 2019-08-14 13:03:41 +08:00 via iPhone
@yuting0501 #5 我也是 😂
|
7
sneezry 2019-08-14 13:17:27 +08:00 via iPhone
用 MQTT over websocket,这个需求协议本身能帮你实现
|
8
liuzhen 2019-08-14 15:41:43 +08:00
就你自己说的方式,不实时落地文件就好了,放在内存或队列里定时落地
|
9
frozenshadow 2019-08-14 21:18:26 +08:00 via Android
@sneezry 没有建立过连接的用户不行吧
|
12
Bakarua OP @pubby 已经解决啦 发给不在线的用户的信息用 redis 做缓存 等用户连接上 websocket 去 redis 里根据用户 id 匹配该未接收的消息 然后推送给他
|
13
Bakarua OP @yuting0501 能定向脱发用户推送信息 那市场肯定很大
|