美文网首页
全双工通信的 WebSocket

全双工通信的 WebSocket

作者: 码农甲 | 来源:发表于2018-09-20 14:32 被阅读60次

全双工通信与半双工通信的区别

半双工:参考对讲机,A:能不能听到我说话,over 

B:可以可以,over

全双工:参考打电话,A:哎,老王啊!@#!#¥#@!#

B:@#¥@¥@¥#@

半双工也可以理解为只能过一辆车的桥,全双工为双向各一车道的桥。前者同时只有一个方向可以过,后者来回双向都可以同时过。

为什么需要 WebSocket?

初次接触 WebSocket 的人,都会问同样的问题:我们已经有了 HTTP 协议,为什么还需要另一个协议?它能带来什么好处?

答案很简单,因为 HTTP 协议有一个缺陷:通信只能由客户端发起。

举例来说,我们想了解今天的天气,只能是客户端向服务器发出请求,服务器返回查询结果。HTTP 协议做不到服务器主动向客户端推送信息。

这种单向请求的特点,注定了如果服务器有连续的状态变化,客户端要获知就非常麻烦。我们只能使用"轮询":每隔一段时候,就发出一个询问,了解服务器有没有新的信息。最典型的场景就是聊天室。轮询的效率低,非常浪费资源(因为必须不停连接,或者 HTTP 连接始终打开)。因此,工程师们一直在思考,有没有更好的方法。WebSocket 就是这样发明的。

WebSocket 协议在2008年诞生,2011年成为国际标准。所有浏览器都已经支持了。

它的最大特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话,属于服务器推送技术的一种。

其他特点包括:

(1)建立在 TCP 协议之上,服务器端的实现比较容易。

(2)与 HTTP 协议有着良好的兼容性。默认端口也是80和443,并且握手阶段采用 HTTP 协议,因此握手时不容易屏蔽,能通过各种 HTTP 代理服务器。

(3)数据格式比较轻量,性能开销小,通信高效。在连接创建后,服务器和客户端之间交换数据时,用于协议控制的数据包头部相对较小。在不包含扩展的情况下,对于服务器到客户端的内容,此头部大小只有2至10字节(和数据包长度有关);对于客户端到服务器的内容,此头部还需要加上额外的4字节的掩码。相对于 HTTP 请求每次都要携带完整的头部,此项开销显著减少了。

(4)长连接,保持连接状态。与HTTP不同的是,Websocket需要先创建连接,这就使得其成为一种有状态的协议,之后通信时可以省略部分状态信息。而HTTP请求可能需要在每个请求都携带状态信息(如身份认证等)。

(5)没有同源限制,客户端可以与任意服务器通信。

(6)协议标识符是ws(如果加密,则为wss),服务器网址就是 URL。

一句话总结一下 WebSocket:

WebSocket 是 HTML5 开始提供的一种独立在单个 TCP 连接上进行全双工通讯有状态的协议(它不同于无状态的 HTTP),并且还能支持二进制帧、扩展协议、部分自定义的子协议、压缩等特性。

目前看来,WebSocket 是可以完美替代 AJAX 轮询和 Comet 。


三、客户端的简单示例

WebSocket 的用法相当简单。

1. websocket构造函数

用于创建一个webSocket实例,执行后,客户端就会与服务端连接

2. webSocket.readyState

readyState属性返回实例对象的当前状态,共有四种。

CONNECTING:值为0,表示正在连接。

OPEN:值为1,表示连接成功,可以通信了。

CLOSING:值为2,表示连接正在关闭。

CLOSED:值为3,表示连接已经关闭,或者打开连接失败

例如:if(ws.readyState ==WebSocket.CONNECTING){}

3 . webSocket.send()

send方法用于向服务器发送数据

4 . webSocket.onmessage()

用于指定收到服务器数据后的回调函数

5.webSocket.onclose

用于指定连接关闭后的回调函数。

相关文章

  • websocket学习

    websocket的定义 WebSocket是一种在单个TCP连接上进行全双工通信的协议。WebSocket通信协...

  • 2.WebSocket

    WebSocket简介 WebSocket是一种在单个TCP连接上进行全双工通信的协议。WebSocket通信协议...

  • WebSocket

    WebSocket简介 WebSocket是一种在单个TCP连接上进行全双工通信的协议。WebSocket通信协议...

  • websocket

    WebSocket简介 WebSocket是一种在单个TCP连接上进行全双工通信的协议。WebSocket通信协议...

  • Spring Boot 整合单机websocket(附githu

    websocket 概念 websocket 是一个通信协议,通过单个 TCP 连接提供全双工通信。websock...

  • 聊天功能

    了解webscoket WebSocket是一种在单个TCP连接上进行全双工通信的协议。WebSocket通信协议...

  • 06WebSocket

    WebSocket 全双工通信 创建WebSocket实例 protocol,可选,指定可接受的子协议 属性 re...

  • Websocket协议

    WebSocket是一种在单个TCP传输控制协议连接上进行全双工全双工通信的协议。WebSocket使得客户端和服...

  • 使用Websocket

    WebSocket是一种在单个TCP传输控制协议连接上进行全双工全双工通信的协议。WebSocket使得客户端和服...

  • Websocket协议

    WebSocket是一种在单个TCP传输控制协议连接上进行全双工全双工通信的协议。WebSocket使得客户端和服...

网友评论

      本文标题:全双工通信的 WebSocket

      本文链接:https://www.haomeiwen.com/subject/gjxnnftx.html