Socket
socket又称为套接字,应用程序通常通过套接字向网络发出请求或者应答网络请求。实现应用程序间网络通信。
socket可以使用TCP/IP协议或UDP协议。
TCP/IP协议:是目前应用最广泛的协议,是构成Internet国际互联网协议的最为基础的协议,由TCP和IP协议组成。
TCP协议:面向连接、可靠、基于字节流的传输层通信协议,负责数据的可靠传输。
IP协议:用于报文交换网络的一种面向数据的协议,主要负责给每台网络设备一个网络地址,保证数据传输到正确目的地。
UDP协议:无连接、不可靠、基于报文的传输层协议,发送后不用管,比TCP速度快。
HTTP协议特点
1.无状态协议
2.用于通过internet发送请求消息和响应消息。
3.使用端口接收和发送消息,默认端口为80
4.底层通信使用socket完成。
解决http协议实现客户端和服务器端的消息推送的办法:
1.轮询
客户端定时向服务器发送ajax请求,服务器接到请求后马上返回响应消息并关闭连接。
优点:后端程序编写比较容易。缺点:请求中有大半是无用的,浪费带宽和服务器资源。
适用于小型应用
2.长轮询
客户端向服务器发送ajax请求,服务器收到请求后一直保持连接状态,直到有新消息才会返回响应消息并关闭了连接,客户端处理完响应消息后再向服务器发送信新的请求。
优点:在没有新的消息的情况下不会频繁发送请求,耗费小。缺点:服务器保持连接会浪费资源,返回数据顺序无保证,难于关闭里维护。
3.长连接
在页面嵌入隐藏的iframe,将这个隐藏的iframe的src属性设置为对一个长连接的请求或采用xhr请求,服务器端就能实现不断向客户端发送数据。
优点:消息及时送达,不发无用请求,管理起来相对方便。缺点:服务器维护一个长连接增加开销。
4.flash socket
在页面嵌入使用了socket类的flash程序,js通过调用此flash程序提供的socket接口实现与服务器端的socket接口进行通信,js在收到服务器端传送的信息后控制页面的显示。
优点:实现真正的及时通信。缺点:客户端必须安装flash插件,非http协议,无法自动穿过防火墙
5.websocket
是H5提供的一种浏览器与服务器间进行全双工通讯的网络技术,可以实现客户端和服务器端的长连接,双向实时通信。
特点:异步,事件驱动,使用ws或者wss协议的客户端socket,实现消息推送
概念
是基于tcp的一种新的网络协议。实现了浏览器与服务器全双工通信:不进支持客户端发起请求,还支持服务器端向客户端推送消息。
为什么需要websocket协议?
http协议的缺陷:只能由客户端发起,做不到服务器主动向客户端推送消息
在sebsocket协议之前,双工通信是通过客户端不停(轮询)发送http请求,从服务器拉取更新来实现,导致效率低下,而且有的时候服务器端根本没有更新,客户端发起的请求是没用的。
客户端不停的轮询导致的问题:
1.服务器被迫给每个客户端使用很多不同的底层TCP连接:一个用来向客户端发送消息,其他用来接收每个传入的消息。
2.有些协议有很高的开销,每一个客户端和服务器之间都有http头。
3.客户端脚本被迫维护从传出连接到传入连接的映射来追踪回复。
解决方案,使用websocket提供的单个tcp连接双向通信。
实现原理
在实现websocket连线过程中,需要通过将浏览器发出websocket连线请求,然后服务器发出回应,这个过程称为“握手”。
在websocket API,浏览器和服务器只需要做一个握手动作,然后,浏览器和服务器之间就形成了一条快速通道。两者之间就可以实现数据互相传送。
在websocket协议中,为实现及时服务带来的好处:
1.Header:相互沟通的Header很小
2.Server Push:服务器的推送,服务器不再被动的接收到浏览器的请求之后返回数据,而是在有数据更新的时候主动推送给浏览器。