WebSocket是一种比较新的协议,它是伴随着html5
规范而生的,虽然还比较年轻,但大多主流浏览器都已经支持。它使用方面、应用广泛,已经渗透到前后端开发的各种场景中。
对http一问一答
中二式流程的不满,催生了支持双向通信的WebSocket
诞生。WebSocket是个不太干净
协议。
一、WebSocket协议只能浏览器发起么?
不是。目前此协议的受众的也不仅仅是web开发者。
WebSocket只是一种协议,它和http协议一样,使用类似okhttp
的组件,可以在任何地方进行调用,甚至可以借助WebSocket实现RPC
框架。
二、WebSocket和HTTP什么关系?
WebSocket和http一样,都是处于OSI
模型中的最高层:应用层
。
WebSocket借助http
协议进行握手,握手成功后,就会变身为TCP通道
,从此与http不再相见。使用netstat或者ss,能够看到对应的连接,它与处于抽象层的socket,在外观上没有区别。
三、WebSocket和长轮询有什么区别?
长轮询,就是客户端发送一个请求,服务端将一直在这个连接上等待(当然有一个超长的超时时间),直到有数据才返回,它依然是一个一问一答的模式。比如著名的comted。
WebSocket在握手成功后,就是全双工
的TCP通道,数据可以主动从服务端发送到客户端,处于链接两端的应用没有任何区别。
WebSocket创建的连接和Http的长连接是不一样的。由于Http长连接底层依然是Http协议,所以它还是一问一答,只是Hold住了一条命长点的连接而已。
长轮询和Http长连接是阻塞的I/O,但WebSocket可以是非阻塞的(具体是多路复用)。
四、如何创建一个连接?
WebSocket的连接创建是借助Http协议进行的。这样设计主要是考虑兼容性,在浏览器中就可以很方便的发起请求,看起来比较具有迷惑性。
近期评论