默认
发表评论 7
想开发IM:买成品怕坑?租第3方怕贵?找开源自已撸?尽量别走弯路了... 找站长给点建议
本人萌新,关于IM设计中长连接和http的一些疑问,希望好心人指点
阅读(26892) | 评论(7 收藏 淘帖1
1. 有实时性需求的通信(比如推消息),和无实时性需求的通信(比如下载文件),要不要全都用长连接来做?我看到一些帖子里说,长连接已经建立了,通讯效率很高;但是也有说,HTTP实现、拓展简单,长连接的在这方面有局限性,我不知道怎么样才算通用的方法。

2. 基于PC客户端的IM,长连接用websocket怎么样?
我这边其实是一个学校留的作业,用户量没那么多,但是老师也强调了要考虑大并发、大流量什么的,我们姑且选websocket,不知道这个技术好不好呢?
3. 在长连接层作为一个单独的层的情况下,用户在线信息该怎么传递给后面的逻辑层呢?
我们目前姑且采用了分层——微服务的架构,层次分为:客户端——长连接层——微服务网关——微服务层,微服务层会需要用户的在线信息,而长连接层在上面,那这样该怎么弄呢?
我目前有几个思路。
一个是可以让长连接层调用微服务,把在线信息存到微服务层,但是这样可能就会有点延迟吧;
第二个是,把长连接定义为一种特殊的微服务,整合到微服务层,但是这样仍然有一个问题就是因为长连接层承接的是长连接而非HTTP这种短连接,在负载均衡方面应该不能和其他微服务地位一致吧,而且前端直接连到微服务节点这是否不太对劲,还是说像spring cloud这种框架都能整合好呢?
第三个是,长连接层分成两部分,一部分承担长连接,一部分把用户的在线信息作为微服务并到后端,这两部分逻辑上可能是跨层的,但物理上是临近的,这样可能好一点吧..?
4. 用户聊天记录里带图片的话,每次推消息是直接连图片一起推了呢,还是带着图片的key推然后让客户端自己拉取图片呢?还是说直接推缩略图,然后用户想看大图再自己拉?
因为图片一般都想直接看嘛... 但是又很大。。

暂且就这些问题,如果有大佬愿意为我解答,我给您磕头了! 砰砰砰!

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

标签:求助 IM开发
上一篇:IM客户端sqlite中的聊天消息是否需要定期清除?下一篇:手机恢复出厂设置,im聊天记录能恢复吗

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

推荐方案
评论 7
1、除了实时通信需要长连接以外,其它能用http的你尽可能用http,因为http的维护和使用成本要低太多,一是因为它标准,可以用的现成方案很多,二是因为通用,大家都懂。而长连接这种东西,定的协议都是私有的,很难有什么现成可用的东西给你套一下就完事。

2、pc富客户端的话,建议还是尽量玩Udp、tcp,这种经典的技术,经过这么多年使用和积累,可以找到的资料要多的多,至于websocket,你看它前面3个字母是啥意思,总归每种技术都有它的适用场景,没必要乱套用。

3、可以用RPC、MQ。

4、每次推个url或你说的key就好了,到客户端自已拼接完整的下载url。
引用:JackJiang 发表于 2022-04-14 10:48
1、除了实时通信需要长连接以外,其它能用http的你尽可能用http,因为http的维护和使用成本要低太多,一是 ...

感谢您的指点~
我还想问一个问题,就是我这边要采用微服务,微服务就会有一个网关,把长连接直接通过网关来转发到后面的服务您觉得怎么样,还是说最好在前面再加一个专门进行长连接管理的层?
我个人看来,长连接有大量连接的需求,这一点上适合单独做一层;但是长连接这个模块需要与其他服务通信,也需要负载均衡,这样其实做成一个微服务也说得过去。
签名: 技术大海太深了
引用:fritz1149 发表于 2022-04-14 11:13
感谢您的指点~
我还想问一个问题,就是我这边要采用微服务,微服务就会有一个网关,把长连接直接通过网 ...

我给你的建议是,先别想着一步到位,后端先一把梭把第一个版本做出来后,再考虑第二个版本(就是你现在考虑的),否则你后端可能走的弯路会弯的更远,很容易失控。im这种系统,没有想象的那么容易搞
引用:JackJiang 发表于 2022-04-14 11:22
我给你的建议是,别想着一步到位,后端先一把梭把第一个版本做出来后,再考虑第二个版本(就是你现在考虑 ...

好的,感谢您,我受教了
签名: 技术大海太深了
非常好
请问一下你的第三点确定了方案了吗?我在考虑用rpc实现你第一种方法,实现应该是长连接层作为rpc客户端,微服务层作为rpc服务端,客户端给长连接层发消息,然后长连接层调用rpc转发到微服务层。现在有一个疑惑时,微服务层处理完消息后,怎么推送回长连接层?
引用:肥斯大只仔 发表于 2022-04-20 23:46
请问一下你的第三点确定了方案了吗?我在考虑用rpc实现你第一种方法,实现应该是长连接层作为rpc客户端,微 ...

我目前采用的方案是把长连接层作为一个微服务,然后长连接采用websocket,websocket可以被spring cloud gateway转发(这个待确认),性能上因为是一个作业所以决定先实现出来再说。
微服务推送回长连接层,我觉得一种方法是让长连接层也作为一个rpc服务端,提供转发的服务,这样微服务也可以调它;另一种是长连接层向后面通过websocket或者自定义协议(基于tcp或udp),从而实现互动。
目前http不能实现服务端主动推送给客户端,因此一般需要采用其他方法,像上面提到的。
签名: 技术大海太深了
打赏楼主 ×
使用微信打赏! 使用支付宝打赏!

返回顶部