默认
发表评论 9
想开发IM:买成品怕坑?租第3方怕贵?找开源自已撸?尽量别走弯路了... 找站长给点建议
为什么主流IM登录用HTTP,聊天用TCP,不可以一起用吗
阅读(74138) | 评论(9 收藏1 淘帖1 1
1金币
看到某些系统,大多数都是HTTP和TCP一起用,比如登录用HTTP,获取朋友圈之类的也是用HTTP,然后聊天用TCP,为什么不全都用TCP呢

标签:IM开发
上一篇:WebIM嵌入到网页的html片段如何不受主页面样式的影响下一篇:求教如何才能更好的设计出IM聊天会话列表

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

推荐方案
评论 9
是的,完全可以不一起用。

但是,做过网络编程的都知道,直接用TCP Socket来通信,你一个最简单的数据读取或发送,底层涉及到3次手、4次挥手,应用层涉及到端口绑定、socket连接、流读取、socket断开等等,这些最原始的API层的操作,技术要求是很高的,不是随随便便一个程序员能写出足够稳定强壮的代码的。

但HTTP就不一样,它等于在TCP上又封装了一层,最起码简单易用,初级程序员找个库,设置一下url,随随便便就能调,才不用管什么底层tcp、socket这些玩意。

而且http更大的好处是通用、标准化,什么集群、反向代理、高并发处理等等,都在现成的方案可以用。但是反观直接用tcp这种方式,你随随便便搞的了集群、反向代理这些吗。。。

其实技术没有绝对可用或不可用,只是在权衡各种利弊之后,只有合适与不合适之分。
引用:JackJiang 发表于 2019-03-10 17:45
是的,完全可以不一起用。

但是,做过网络编程的都知道,直接用TCP Socket来通信,你一个最简单的数据读 ...

但一般IM系统都已经做好了这一条TCP连接,相应TCP的封装也做好了,所以业务开发工程师也只是把数据写入写好的TCP,例如 MySocket.send(data),对于初级程序员难度也不大。
其实我的意思,本来IM已经建立了TCP连接了,为什么还要开另外的HTTP去连接服务器,因为HTTP又开一条TCP连接,这样的话不会浪费服务器资源吗,当然这里假设TCP和HTTP都是连接同一台服务器。

另外你说的通用、标准化,什么集群、反向代理、高并发处理等等,这里可能是一个点。
引用:cyc 发表于 2019-03-11 20:00
但一般IM系统都已经做好了这一条TCP连接,相应TCP的封装也做好了,所以业务开发工程师也只是把数据写入写 ...

不知道你有没有真正开发过IM系统,或者你应该对较大型一点的系统了解非常少,像这些可以用http实现的普通数据拉取和提交,也用socket这种代码去实现,肯定是大炮打蚊子的效果,你可以说它封装好了代码,但毫无疑问,这将会让socket的代码越来越复杂,本身socket的代码就够难写的了,现在又掺进了这么多业务的复杂性,那后期的并发、性能优化,简直是噩梦。有经验的架构师都清楚,越是复杂的东西,它能优化的空间就越有限,因为牵涉的面就越广,牵一发动全身。

而且,现在流行的所谓微服务,统统跟socket这些无缘。

http的底层其实就是socket这些,所以socket其实是可以解决http能解决的一切问题,但只是编程所处的层级不一样,技术难度不一样,成本不一样。就好像用C(甚至用汇编)可以解决所有编程问题一样,并不意味着你什么都应该用它解决就是最佳方案,这涉及到很多方面的权衡。一个优秀的系统要考虑的方面很多。

评分

1

查看评分

引用:JackJiang 发表于 2019-03-11 20:16
不知道你有没有真正开发过IM系统,或者你应该对较大型一点的系统了解非常少,像这些可以用http实现的普通 ...

赞群主!
你直接用tcp做一些本该http就能实现的功能,那如果你以后换个别的系统开发,那这些代码还怎么重用~~~~
总不能动不动就要开socket,起点这么高吧,这样会被leader骂死
签名: 周末了,可以浪了
聊天采用tcp 是为了 服务器主动推消息的时候 可以做到实时性

其余用http 是对实时性要求不高 也可以节省资源
引用:六神 发表于 2019-03-18 19:36
聊天采用tcp 是为了 服务器主动推消息的时候 可以做到实时性

其余用http 是对实时性要求不高 也可以节省 ...

这个好像说不过,HTTP本来就有keeyalive,保存一条连接
考虑下后期迭代,版本发布问题
引用:cyc 发表于 2019-03-28 16:56
这个好像说不过,HTTP本来就有keeyalive,保存一条连接

关于http用来实现实时通信的问题,有必要系统地读一下这个《新手入门贴:史上最全Web端即时通讯技术原理详解》,你就豁然开朗了
打赏楼主 ×
使用微信打赏! 使用支付宝打赏!

返回顶部