做了很久的web开发,一直专注于增删改查,对于即时通讯所使用的技术一无所知。因此,有很多问题存在心里最终形成了一个很大的问号,在即时通讯的聊天中,前后端如何收发信息呢?基于web的即时通讯和app端的即时通讯会不会有什么不同呢?
通过做app的朋友了解到,他们是轮询请求后台服务器的,每隔3S、5S就请求后台一次。哇,这会不会太频繁?用户多了怎么办?一万个用户,3S、5S请求一次,一个小时是多少次呀?用户再多一点呢,这是不可思议的事情,估计服务器要崩了吧......
此时的服务器如何应付的了这种频繁请求?曾经看过一个WEB端的即时聊天,是使用WEBSOCKET做的,为何使用WEBSOCKET去做,WEBSOCKET又为何物?
带着这些个疑问,想着以前加过的那么多牛群,抛出了这个问题。把这个问题抛到了五六个群里,有一个群是做wex5的群,wex5是开源并且免费使用的APP开发工具,采用H5+CSS3+JS标准技术,回想当初自己对这个技术做过调查的,但只是调查了一下,并没有往深处去。
这个群也是在调查时加的,群里的伙伴,估计都是做wex5开发的,会对我提出的问题感兴趣吗?犹豫了一下,本不想往这个群抛的,但想想还是抛一下吧,万一有人回答呢。
最后的结果是,只有这个让我最犹豫的这个群起了水花,其他群都默默无闻,心里很是感叹,他们遇到问题,自己也没有少拿主意,自己遇到问题真是冷清呀,或许他们也不会吧。
抛出的这个问题确实涉及到了基础,没有点扎实的功底根本搞不懂,市面上很多技术会傻傻地让你不知道使用哪一个?先听听他们的谈论,心里终于有了点底,计算机网络原理、计算机网络技术没有白学呀!
如果没有学过这两门课,很可能会听不懂Q友们说的话;学过这两门课,听听他们的讨论,可以很快做出抉择,这就是区别吧。
HTTP是客户端浏览器和WEB服务器之间的应用层协议,也就是浏览器访问web服务器上的超文本信息时使用的协议。自己一直以来做的项目就是这种,放在服务器上的。
项目上线后,给客户一个URL地址,客户就可以在浏览器的地址栏上输入这个地址,访问服务器上的项目。如果开发的是管理后台,则还需要给用户创建账户,分配密码等事项。
访问WEB项目的主要途径是浏览器,之前还需要为项目申请域名,部署服务器,最后完成项目上线。上线后的项目,只要知道域名,就可以根据用户自己的权限进行访问了。
由于这些都是在广域网里进行的,所以这些项目都统称为WEB(World Wide Web的缩写,全球广域网、万维网的意思)开发。即时通讯,像微信网页版也是基于浏览器的的,也可以称作是WEB开发。
在多个QQ群里抛出的问题是,即时通讯中的聊天技术除了socket还有哪些其他的技术。WeX5里的群友们,说法各异。虽说大家都做软件编程这一行,但是能把做的说明白,原理讲清楚也是件不容易的事情。
有的Q友说,使用MQ,有的说使用长连接,群主说MQ是基于HTTP协议的,还是SOCKET的;也有的Q友使用MQ做的朋友圈,而且还扯到分布式上面去了,额.......还要一个Q友,长连接、轮询......,服务器端还扯到了轮询,这....... 当然,群主推荐了一个不错的开源框架Tio,参考网址:https://www.t-io.org/?qm=1
通过Q友的七嘴八舌,过滤出这么几个关键字,长连接、短连接、MQ、SOCKET、MQTT、Netty、Tio。长连接、短连接要从概念上突破,理解了概念,就没有什么问题了。什么是长连接,什么是短连接,他们之间的区别在哪里?
还记得计算机网络的层次结构吗?这是在面试时经常遇到的题目,当然,熟练的同学闭着眼睛都能够背出来,物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。
HTTP协议是属于应用层的,数据传输属于传输层。传输层有两种协议,一种是TCP协议,一种是UDP协议。TCP协议是可靠的、面向连接的协议。UDP则相反,是不可靠的,在传输前不需要建立连接。
TCP建立连接需要三次握手,先是请求方建立连接,然后接收方确认连接,最后请求方再确认连接。
TCP释放连接也是三次握手,先是请求方发送接收不到数据的通知,然后接收方应答并通知数据已经传输完毕,最后请求方应答数据接收完毕。
就这样,浏览器每和服务器交互一次,就要进行不少于六次的握手;浏览器每发起一次请求,服务器都要做出相应倍数的回应,需要建立连接、数据传输、释放连接。
对于一般的增删改查之类的数据交互,可以这样,建立连接、数据传输、释放连接,这样的连接方式被称之为短连接。
换个场景,即时通讯,是个交互非常频繁的动作,如果也这样不停地建立、释放连接,对于服务器来说,是大压力大损耗,这时就需要使用长连接,建立连接之后,连接保持一定的时间,在这段时间内传输数据,就不需要再次浪费资源建立连接,只需传输数据即可。等超时后,再释放连接。
这样做的好处,就是减轻服务器的访问压力。具体使用哪种,要视应用场景而定。之前做的web开发,数据库访问是基于长连接的,其他的都是短连接。websocket是基于长连接的,固用来做即时通讯。
所以呢,对于大家的七嘴八舌,一定要有足够的分辨力才能分出真假了。Q友们给出的答案,也要花时间调查一下,从概念上,从理论上,逐一了解,最后才能知道哪款是适合自己的。
曾经用MQ做过一个DEMO,模拟聊天室,或许是经验不足,竟然没有模拟成功,总感觉消息中间件用在聊天上,不合适,更或许是自己还没有找到合适的方法吧。
这样分析下来,长连接和短连接都是针对TCP协议的,HTTP协议是基于TCP协议之上的,像聊天这样的业务场景,根据网友的实战经验都是使用长连接,要看一项技术是不是适合这个场景,还要看基于什么协议,长短连接是否合适等等因素。
写了这么多,满脑子概念,快成浆糊了,还是找个DEMO写一写,体验一样长连接和一般的短连接有什么不同吧。