默认
发表评论 9
想开发IM:买成品怕坑?租第3方怕贵?找开源自已撸?尽量别走弯路了... 找站长给点建议
是的,完全可以不一起用。

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

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

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

其实技术没有绝对可用或不可用,只是在权衡各种利弊之后,只有合适与不合适之分。
评论 9
引用:cyc 发表于 2019-03-11 20:00
但一般IM系统都已经做好了这一条TCP连接,相应TCP的封装也做好了,所以业务开发工程师也只是把数据写入写 ...

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

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

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

评分

1

查看评分

引用:cyc 发表于 2019-03-28 16:56
这个好像说不过,HTTP本来就有keeyalive,保存一条连接

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

返回顶部