00:00
这节块我们来了解一下web socket,那什么是web socket呢?Web socket它是H5新增的一个全双攻通讯的一个协议啊,就是为了让客户端和服务端能基于这个TCP握手之后啊,两者之间就可以建立一个持久的连接啊,然后实现双向的数据传输,那什么叫双向的数据传输呢?客户端可以向服务端发送数据,而服务端也可以向客户端发送数据,那如何实现双向的数据双向传递,在早期的时候,没有这个web socket的时候,那是通过这个P请求来模拟的这个双向数据的传递。那我们知道这个APP呢,它是一个啊半双工的协议,就是说我们向服务端发起一个请求,服务端可以给我们响应啊,那我们再发一个请求,服务端也可以再给我们响应,对不对,但是服务端做不到通过这个APP协议向这个客户端去传递这个数据,所以说是通过这个at APP的请求模拟的双向数据的传递,那主要有哪些方式呢?就是使用的一个是轮询,以及这个长轮询以。
01:00
的这个旅流技术,我们来一看一下啊,首先是看这个轮询,轮询呢,就是客户端定时去发送一个get请求啊,就是定时向服务端去请求这个数据,那比如我们用IGS写个定时器,然后啊配合这个阿贾克斯,哎,定时向服务端去请求这个数据,那这就是一个哎轮询,那这种方式呢,虽然能满足一定的需求,但是存在一些问题,那比如说服务端没有新的数据,但是客户端啊还在一级发这个盖的请求啊,浪费了这个带宽的一个资源,而且会占用这个服务端的CPU的一个内存啊,这是轮询,那常温询呢,常温询就是在这个轮询的基础上做了些改进啊,就是说如果服务端没有新的一个数据,那服务端呢,就会把这个请求暂时给保持住啊,先不给你响应,当有这个新的数据返回的时候啊,我再给你返回这个新数据,哎,但是如果超过了一定的时间,就是说很长时间服务端都没有新的数据,那么这个请求就会超时对吧?超时之后服务端就会返回了一个这个超时的请求,那客务端如果收到了超时请求,继。
02:00
去发送请求,就这么一直循环下去啊,也是一个啊,就是说不断去请求服务端的一个过程啊,虽然在这个轮询的基础上做了一些改进啊,但是还是不是很快啊,尤其是碰碰到这种高并发的这种情况,服务器的啊压力依然会很大啊,所以这个常纹神它本质上和轮询并没有什么区别啊,而且我们发送这个APP请求这个数据包,它的这个数量啊,头部的数量往往是非常大的,而我们真正可能用到的数据只有很小啊,这样会对这个网络带宽也会造成一种浪费,尤其是在高频发的情况。好那还有一种技术就是使用这个流技术,流技是基于这个FMFM呢它是啊HTML的一个啊标签,那这个标签呢,它的这个src属性会保持对指定的这个服务端的一个常链的一个请求啊,这样的话服务端就可以不断的向客户端去传递这个数据,可以看书流技术与常文询它的区别是什么呢?那长轮询的本质还是一种轮询啊,只不过在这个。
03:00
呃,短人群的基础上,这个连接的时间有所增加,那想要向服务端啊去获取这个新的数据,客户端也是只能一遍一遍的去发动这个请求,而这个流技术是可以一直保持连接啊,不需要这个客户端的请求,当数据发生改变时,服务端也能将数据传给这个客户端,但是会有一个不足的地方是什么呢?那这个网页它会处于一直未加载的,未加载完的一个状态,因为我们使用的是这个s frame的这个src属性,去对这个一个server的一个链接啊,进行发起这个场景的一个请求啊,所以说它会产生这么一个情况,就是我们这个网页会显示一直未加载完成。啊,所以呢,这点也是啊,不是特别好的啊,前面我们说的这些啊,都是为了解决一个什么问题呢?就是实现数据的双向通讯,就是客户端可以向服务端发送数据,而服务端也可以向客户端发送数据,但是我们在使没有这个web soet之前,那使用的哎轮询的方式,或者这种流技术都会存在种种的一个问题,那为了解决这个哎双向数据通讯的一个问题,Web socket哎终于就来了,那前面我们就是说使用了这么多的方案,就是诶让这个server能将最新的数据啊传递给客户端,也就是说服务端能主动的去向客户端去通讯啊,但是呢,这个attc呢,它是一个懒惰利协议,而so呢,只有收到了这个APP请求才会做出响应,否则什么都不会干,对吧,那我们也写了这么多啊,像我们知道我们发送一个请求向服务端,服务端会给我们响应对不对,那我们每发一个请求,服务端都会给我们响应,但是如果我们不发请求的话,服务端呢,他什么也干不了啊,他不会给我们数据这个客户端响应。
04:37
这些数据啊,所以为了解决这个服务端能主动向客户端发送数据的问题啊,因为我们使用APP协议就可以让客户端向服务端发送数据,对吧?那我们现在还想要让服务端能向客户端发送数据,诶,所以呢诶,为了实现这种双向数据的传递啊,W3C在这个H5中就提供了一种客户端与服务端间进行啊全双工通讯的一个网络技术啊,就叫web,那webck呢,它是一个全新的独立的协议,注意它的协议啊,它也是基于这个TC协议,它与这个呃,At协议兼容,但却不会融入这个AP协议啊,它和这个ATP协议呢,都是处于这个应用层的啊,都是基于这个TCP协议的一个啊应用层的一个协议,它仅仅是就是说web socket仅仅是作为这个H5的一部分啊,那么web socket与APP什么关系呢?诶,简单来说web socket就是一种协议,是一种与ADB同等的一个网络协议,两者都是在应用层啊,都是基于这个ttp协议,但是web socket它是一种就是双向通信的一个协议啊。
05:37
旦建立之后,那webck的这个服务端与客户端都能主动的向对方发送或接收数据,同时web sock建立链接时需要借助这个A协议啊,但是一旦建立好这个链接之后,那客户端和服务端之间的通讯就与APP无关了啊,就是我们在建立这个web service协议的时候需要借助APP协议,但是一旦这个啊通讯建立好之后,就跟APP协议没关系了啊,就是使用web service协议来进行客户端与服务间,服务端之间的一个通讯啊啊,那相比于传统的APP,每次哎请求应答,请求应答那都要客户端与这个服务端建立这种链接的一个模式,那web so呢,它是一种长链接的模式啊,这里我们引出了长链接的概念,具体是什么意思呢?就是一旦web啊连接建立以后,除非客户端或者服务端有一端主动断开链接啊,否则每次的数据传递啊,都不会再像APP那样每次都需要请求用达,而是直接可以通过已经建立好的链接来进行数据的一个传递,而且客户端可以向服务端传递数据,服务端呢也可以向客户端传递数据。
06:37
那可以看出客户端只需要第一次与服务端啊建立这个链接,当这个啊server确认链接之后,两者便一直处于链接状态啊,就是一直处于链接状态,所以我们称为长链接,那直到远方断开web sock链接才断开清楚了吧?啊,那我们来看一看这个web sock和这个P的一个区别啊,首先它们相同的地方都是需要建立这个TCP链接,而且它们都属于七层网络应用,这个网络协议中的应用层协议啊,不同点是ADB是单向的一个数据流,客户端需要向服务端发送请求,服务端才响应这个这个并返回这个数据,而这个web soet连接后,可以实现客户端和服务端双向的一个数据传递。那还有第二点,由于是新的协议,那at APP呢,我们使用的是ATP啊,这种协议或者是这个APS,但是web socket使用的是啊WS想像这种开头啊。
07:32
啊,那接下来我们再来看一个概念,就是web socket与socket啊这么个概念,好,那个在网络的应用中啊,两个应用程序同时啊,需要同时向对方发送消息的能力,也就是我们所说的啊全双工通信啊,所利用到的技术就是soet,那它能够提供端对端的一个通讯,那对于程序而言,需要在A端去建立一个啊so的实例,并且呢,为这个实例提供诶所要连接的这个B端的这个IP地址以及端口,而且在B端要连的时候呢,也要建立一个啊so的实例啊,绑定本地的端口来进行监听,好当AB建立连接之后,那我们这个AB双方就建立这个端对端的TCB链接,就可以进行双向的通讯,而这个web socket它是H5规范的一部分,它借鉴了socket的这个思想啊,那为这个客户端和服务端之间提供了一个类似啊,类似的双向通讯的一个机制,那同时web socket又是一种新的应用层协议啊,就是应用层协议,它包含了一套标准的这个API,而我们常说的这个socket。
08:33
的啊,它并不是一个协议,而是一组接口啊呃,这组接口呢,这个soet,这这组接口呢,就是方便大家直接调用更底层的一个协议,比如说TCP和udp,那我们来看一个图,大家就知道怎么回事了啊,那这是一个网络协议的一个啊啊简简化的一个图啊,那首先我们来从最底层的看,就是硬件啊接口,一些网络接口,然后就到了这个IP层,就是网监层,那在IP层之上啊,有这个TCP和UTP,这属于协议的传输层,也是比较底层的一个协议好,但是如果我们要直接去使用这个TCP和UTP的话,是比较麻烦的啊,所以在他们中间有一个soet的一个抽象层来为这个啊,其他的这个啊,这个应用层的使用啊,提供一组比较好用的一个接口,让应用层去使用啊,所以我们说的这个web so,它也是处于这个应用层的一个协议,明白了吧,那我们所说的这个ATT协议,也是处于这个应用层的一个啊协议啊,他们都是就是说web socket和at。
09:33
给大家说过了他们的这个啊,相同的地方啊,这里都是属于七层协议中的这个应用层的一个协议,好,而且都需要建立TCB链接,对吧?好,那这是web socket和socket的一个区别,哎,大家不要搞混了啊好,那接着我们再来看一个什么东西呢?socket.io那这里又引出了一个概念啊,Socket IO,那什么是socket.io呢?Socket IO,嗯,它是一个封装了web socket啊,基于noe和javascript框架的,而且包含了客户端和GS的啊,和这个sor端的这个node,然后屏蔽了所有底层的一些细节,让我们的这个顶层调用非常的简单啊,说的这个比较绕,对吧,其实就是它是对这个web socket的一个一层封装啊,让我们更加简单的去使用这个web socket协议啊,那与此同时,那只sock IO还有一个非常重要的好处就是它不仅仅是支持这个web socket还支持许多的轮机制以及其他的实现通讯的方式啊,并且封装了通讯的接口。那这些方式主要。
10:33
咱这个啊,比如说这个flash socket呀,阿贾克斯的这个长轮询对吧,以及这个持久的这个f frame啊,JP的轮巡等等,哎,总结一句话就说socket啊,IO啊,它包含了我们前面说的这个,哎,它封装了我们前面说的所有的轮询方式,以及这个还支持web so的协议,哎,它会自己去检测这个当前的环境支不支持web so协议,如果不支持,它会自动选择最佳的方式来实现socket.io啊,它不是web socket,它只是将啊,Web socket啊和这个轮询以及其他的实现通讯的这个其他的实时通讯的方式封装成了一些通用的接口啊,并且呢,在服务端实现了呃相应的代码,也就是说web so,它仅仅是so.io啊,这个实现实时通讯的一个子集啊,因此呢,Web so,客户端连不上sock.io的客户端,哎,当然这个s.I客户端也连不上web客户端,清楚了吧?啊,当然我们如果直接用web so,我们也能写这个实时通讯啊,也能写这个双向的数据传递会比较麻烦,你会。
11:33
调很多这个他提供的一些呃,原生的一些接口,一些API啊,那我们如何使用这个soft的IO去写的话就比较省事,因为它对这个web进行了进程封装啊,那到最后呢,我们来总结一下啊,那首先为什么会出现了这个啊web sock就是为了实现这个双向通讯啊,为了解决这个数据的双向传递,哎,让客户端啊能给服务端发数据,让服务端也能给客户端发数据,哎,所以呢,就是诶出现了web OK,那web呢,它仅仅是一个协议啊,注意它是一个协议,它和ADP一样,都是属于应用层的一个协议啊,而这个socket,什么socket是啊,一组接口,它是为了啊更方便的去调用啊,更底层的一个协议,比如说TCP和udp啊,那socket等iou是什么呢?它是web socket的一个超级啊,封装了其他的一些通讯技术,那提供了更加友好的接口,让我们来使用啊,这是他们这些概念大家不要搞混了啊,那通过前面的这些啊,基本概念的一个介绍,以及最后给大家一个总结。
12:33
大家在见到这些啊,专业的这个名词的时候,一定要能区分开啊,不要搞混了啊,不要认为web socket就是socket啊,它俩根本不是一个东西啊,一个是协议,一个是接口啊,而SORL呢,是一个封装后的一个GS的一个库啊,它是一个呃封装后的一个呃东西。好,那这节我们就到这里啊,简单的给大家介绍了一下web socket,那为什么要介绍这个web sock呢?因为我们接下来要写的一个案例,就是一个聊天室的一个案例,那我们知道聊天室呢,就是哎,我给你发消息别人都能收到啊,别人给我发消息我也能收到这个就是啊,一个数据的一个双向的一个传递啊好,那这小节呢,我们就先到这里。
我来说两句