首页 理论教育WebSocket的原理及运行机制

WebSocket的原理及运行机制

【摘要】:WebSocket是HTML5一种新协议。WebSocket需要类似TCP的客户端和服务器端通过握手连接,连接成功后才能相互通信。在客户端断开WebSocket连接或Server端连接前,不需要客户端和服务端重新发起连接请求。读者可以查阅WebSocket协议来了解WebSocket客户端和服务端更详细的交互数据格式。

WebSocket是HTML5一种新协议。它实现了浏览器与服务器全双工通信,能更好地节省服务器资源和带宽并达到实时通信,它建立在TCP之上,同HTTP一样通过TCP来传输数据,但是它和HTTP最大的不同有以下几点:

WebSocket是一种双向通信协议,在建立连接后,WebSocket服务器和Browser/Client Agent都能主动的向对方发送或接收数据,就像Socket一样。

WebSocket需要类似TCP的客户端和服务器端通过握手连接,连接成功后才能相互通信。

相对于传统的HTTP每次请求-应答都需要客户端与服务端建立连接的模式,WebSocket采用类似Socket的TCP长连接的通信模式,一旦WebSocket连接建立后,后续数据都以帧序列的形式传输。在客户端断开WebSocket连接或Server端连接前,不需要客户端和服务端重新发起连接请求。在海量并发或客户端与服务器交互负载流量大的情况下,这样能极大地节省网络带宽资源的消耗,有明显的性能优势,且客户端发送和接收消息是在同一个持久连接上发起,实时性优势明显。

再通过客户端和服务端交互的报文看一下WebSocket通信与传统HTTP的不同:(www.chuimin.cn)

在客户端,new WebSocket实例化一个新的WebSocket客户端对象,连接类似ws://yourdomain:port/path的服务端WebSocket URL,WebSocket客户端对象会自动解析并识别为WebSocket请求,从而连接服务端端口,执行双方握手过程,客户端发送的数据格式类似:

可以看到,客户端发起的WebSocket连接报文类似传统HTTP报文,“Upgrade:WebSocket”参数值表明这是WebSocket类型请求,“Sec-WebSocket-Key”是WebSocket客户端发送的一个base64编码的密文,要求服务端必须返回一个对应加密的“Sec-WebSocket-Accept”应答,否则客户端会抛出“Error during WebSocket handshake”错误,并关闭连接。

服务端收到报文后返回的数据格式类似:

“Sec-WebSocket-Accept”的值是服务端采用与客户端一致的密钥计算出来后返回客户端的,“HTTP/1.1 101 Switching Protocols”表示服务端接受WebSocket协议的客户端连接,经过这样的请求-响应处理后,客户端服务端的WebSocket连接握手成功,后续就可以进行TCP通信了。读者可以查阅WebSocket协议来了解WebSocket客户端和服务端更详细的交互数据格式。