-
WebSocket 子协议(定义时)。
var sock = new websocket(url,subportocol);
第一个参数表示要请求的地址的 URL,第二个参数(可选,如果未写入,则默认为空字符串)字符串或字符串数组,每个字符串都是一个子协议。 服务器返回响应客户端子协议以建立连接,否则握手失败。 例如,如果服务器告诉客户端使用 str1 协议建立连接
请求:sec-websocket-protocol:str1、str2
sec-websocket-version:13
upgrade:websocket
响应:connection:upgrade
sec-websocket-accept:lwc5qbyvzlwjfvzuoegiyrdnsg0=
sec-websocket-protocol:str1
upgrade:websocket
-
与客户握手。
来自服务器 PIN 的握手。
客户端的引导行遵循请求行格式,服务器的引导行遵循状态行格式。 request-line 和 status-line 在 [RFC2616] 中定义。
在这两种情况下,引导行后面都跟着一组未排序的标头字段。 本文档的第 4 章中指定了这些标头域的重要性。 还可能显示其他标头字段,例如 cookie[rfc6265]。 标头格式和解析在 [RFC2616] 中定义。
一旦客户端和服务器都发送了握手。 如果握手成功,则开始传输数据部分。 这是一个双向传输通道,每一端都可以独立且随意地发送数据。
握手成功后,客户端和服务器之间来回传输的数据基于消息的概念。 在网络上,消息由一个或多个帧组成。 Websocket 消息不需要对应特定网络层的帧,服务成帧后的消息可以通过中间设施进行合并或拆分。
每个帧都有一个关联的类型。 属于同一消息的帧具有相同的数据类型,从广义上讲,有文本数据(解析为 UTF-8 文本)、二进制数据(他的解析留给应用程序)和控制帧(不打算携带应用程序数据,而是携带来自协议层的信号,例如 hail 连接关闭信号)。
引自以下文章
websocket protocol
rfc-6455 websocket git-book