Websocket
Websocket
Websocket实现长连接的原理
首先Websocket是一个应用层的一种在客户端与服务器之间保持TCP长连接的网络协议,可以建立全双工通信,这样客户端与服务器就可以随时进行信息交换。(虽然任何客户端或服务器上的应用都可以使用WebSocket,但原则上还是指浏览器与服务器之间使用。)通过WebSocket,服务器可以直接向客户端发送数据,而无须客户端周期性的请求服务器,以动态更新数据内容。
在这个过程中,应用层就是定义了如何解释一段数据流,传输层只保证数据能够发送出去。Websocket只是html5规范中目的为了解决HTTP单向通信的缺点,因为HTTP只规定了单向通信,虽然HTTP当中也有长连接的概念,但是这里的长连接指的是TCP连接不会立即释放;对应的Websocket则是指TCP连接不会释放,然后基于TCP连接,服务器端可以把消息通过WS推送给客户端,客户端也可以推送消息给服务器端的这个双向过程。
另外,TCP本身是定义了一种把数据原模原样发送出去,只要双方不关闭连接就不会断开连接的协议。
为什么不选择Socket建立长连接呢
使用Socket也可以建立长连接,只是跟直接使用Websocket相比,输入输出流我们需要自己去使用不同的API去处理。另外,Websocket是HTML5的规范,本身解决的就是浏览器中JavaScript没有办法创建与系统有关的对象比如Socket,网页开发没有办法独立操作Socket,所以才定义了新的协议让浏览器去实现,这样的一种补救方式。如果客户端要使用这个协议进行通信,也是基于Socket进行封装即可。
那为什么使用HTTP设置请求头参数让TCP连接保持更长时间呢?协议是双方通信遵循的标准,即使客户端设置的时间再长,但是服务端规定的时间假设最多只有5秒,这也没有办法完成工作;并且如果用HTTP可以设置成保持TCP无限长的时间,服务端的负载将变得很大,可能无法正常工作了。
数据包格式