请选择 进入手机版 | 继续访问电脑版

默认
发表评论 12
想开发IM:买成品怕坑?租第3方怕贵?找开源自已撸?尽量别走弯路了... 找站长给点建议
请教大佬,IM中聊天消息msgid是由客户端生成还是服务端生成?
大佬们,请教下:

发送消息的时候,msgid是client-A发给服务器的时候,client-A就已经把msgid生成好了直接发给im-server服务器?

还是服务器收到client-A的消息之后,服务器把消息保存到数据库后,生成一条msgid,然后服务器给clent-A发送一个ack应答包,ack应答包里包含服务器生成的msgid,大佬更推荐哪种方案呢?

我们在会议上从这一步出现了分歧:客户端一致认为 是服务端保存消息到数据库后,拿到插入的数据id当做msgid回传给客户端,这样可以保证client-A和client-B之间重试发送消息的时候 两个client之间都知道发送的是同一条数据,这样可以保证2个客户端之间的数据一致性,然后客户端和服务端之间的分歧就这么产生了

即时通讯网 - 即时通讯开发者社区! 来源: - 即时通讯开发者社区!

上一篇:Android端处理接收的IM消息过慢导致消息丢失,客户端到底该如何处理大量接收呢?下一篇:求助,IM离线消息在什么情况下保存比较合适呢?

本帖已收录至以下技术专辑

推荐方案
评论 12
这个im的通信底层,是你们自已从零开发的?没有经验的话,会走很多弯路啊。

这个id,放在客户端生成最合理,如果你同事不信的话,可以看看微信是怎么做的《IM消息ID技术专题(一):微信的海量IM聊天消息序列号生成实践(算法原理篇)
签名: 《零基础IM开发入门(四):什么是IM系统的消息时序一致性?》http://www.52im.net/thread-3189-1-1.html
3 楼: wzyl Lv.2 楼主 1 个月前 | 显示全部楼层
引用:JackJiang 发表于 2020-09-24 14:37
这个im的通信底层,是你们自已从零开发的?没有经验的话,会走很多弯路啊。

这个id,放在客户端生成最合 ...

客户端和服务端应该都是基于通信框架来开发的,不过服务端是php,服务端和客户端之间用的是websocket协议
引用:wzyl 发表于 2020-09-24 14:52
客户端和服务端应该都是基于通信框架来开发的,不过服务端是php,服务端和客户端之间用的是websocket协议

然后还得逼着你们客户端这边,再费劲巴拉的去找支持WebSocket库,原本是为Web端准备的WebSocket协议。。。。哈哈
签名: 《零基础IM开发入门(四):什么是IM系统的消息时序一致性?》http://www.52im.net/thread-3189-1-1.html
5 楼: wzyl Lv.2 楼主 1 个月前 | 显示全部楼层
引用:JackJiang 发表于 2020-09-24 14:55
然后还得逼着你们客户端这边,再费劲巴拉的去找支持WebSocket库,原本是为Web端准备的WebSocket协议。。 ...

额 实在是木有办法啊,我们客户端还有个浏览器端,浏览器的话貌似只能使用websocket协议了
引用:wzyl 发表于 2020-09-24 14:56
额 实在是木有办法啊,我们客户端还有个浏览器端,浏览器的话貌似只能使用websocket协议了

最low的办法都是这样的。最佳实践就是服务端支持不同协议的接入,必竟app原生代码,tcp udp协议久经考验,技术资源丰富
签名: 《零基础IM开发入门(四):什么是IM系统的消息时序一致性?》http://www.52im.net/thread-3189-1-1.html
7 楼: wzyl Lv.2 楼主 1 个月前 | 显示全部楼层
引用:JackJiang 发表于 2020-09-24 15:10
最low的办法都是这样的。最佳实践就是服务端支持不同协议的接入,必竟app原生代码,tcp udp协议久经考验 ...

一语惊醒梦中人= = 醍醐灌顶
顶群主
签名: 该会员没有填写今日想说内容.
9 楼: wzyl Lv.2 楼主 1 个月前 | 显示全部楼层
引用:JackJiang 发表于 2020-09-24 14:37
这个im的通信底层,是你们自已从零开发的?没有经验的话,会走很多弯路啊。

这个id,放在客户端生成最合 ...

大佬,弱弱的问一句 客户端生成的msgid你会保存到聊天记录表里面吗?一条消息对应一条msgid,这样客户端在拉取离线消息的时候方便去重

但是这样有个问题,如何保证android和ios两个不同的客户端在生成msgid的时候不会出现生成一样的呢?

或者说这个msgid你会不会保存呢?如果不保存的话,那客户端在拉取离线消息的时候,通过啥来去重呢?
引用:wzyl 发表于 2020-09-25 08:50
大佬,弱弱的问一句 客户端生成的msgid你会保存到聊天记录表里面吗?一条消息对应一条msgid,这样客户端 ...

你的问题,其实是有一个全局唯一的msgid就不存在问题。我建议你们起步不需要搞的这么高端,直接用UUID来作msgid。全局唯的情况下,你就随便存了。
签名: 《零基础IM开发入门(四):什么是IM系统的消息时序一致性?》http://www.52im.net/thread-3189-1-1.html
11 楼: wzyl Lv.2 楼主 1 个月前 | 显示全部楼层
引用:JackJiang 发表于 2020-09-25 11:19
你的问题,其实是有一个全局唯一的msgid就不存在问题。我建议你们起步不需要搞的这么高端,直接用UUID来 ...

用UUID来生成客户端发送消息的msgid,这样客户端给服务端发送消息的时候,服务端也保存这个msgid到对应的聊天表里 ,一条消息对应一条msgid,这样客户端无论是在线去重还是拉取离线消息的时候去重,都会有一个一条消息对应的msgid,是这个意思吧
引用:wzyl 发表于 2020-09-25 11:27
用UUID来生成客户端发送消息的msgid,这样客户端给服务端发送消息的时候,服务端也保存这个msgid到对应的 ...

是的
签名: 《零基础IM开发入门(四):什么是IM系统的消息时序一致性?》http://www.52im.net/thread-3189-1-1.html
13 楼: wzyl Lv.2 楼主 1 个月前 | 显示全部楼层

明白了 感谢大佬
打赏楼主 ×
使用微信打赏! 使用支付宝打赏!

返回顶部