WebSocket 和 HTTP 相似,只是一个应用层协议,对下层透明,所以不涉及 TCP/IP。

由于浏览器支持了 WebSocket,所以在用 JS 写客户端的时候,是无需考虑数据的编码解码的。

以下主要针对服务器端而言。

[ 接收数据,需要做的是解码,即 decode ]

要接收WebSocket数据,一个端点(endpoint)要监听底层网络连接。

进来的数据必须作为WebSocket帧(frame)解析。https://tools.ietf.org/html/rfc6455#section-5.2

如果接收到控制帧(control frame),这个帧必须被处理。https://tools.ietf.org/html/rfc6455#section-5.5

接收到数据帧的时候,https://tools.ietf.org/html/rfc6455#section-5.6

端点(endpoint)必须把数据的 /type/ 作为已定义的 opcode(frame-opcode) 解释。https://tools.ietf.org/html/rfc6455#section-5.2

帧中的应用层数据(Application data)在消息的 /data/ 中定义。

如果帧包含一个未拆分的消息(unfragmented message),https://tools.ietf.org/html/rfc6455#section-5.4

它是在说一个包含类型 /type/ 和数据 /data/ 的WebSocket消息已被接收。

如果帧是被拆分消息(fragmented message)的一部分,应用层数据(Application data)随后的数据帧被连接起来而形成数据。

当最后一个片段(fragment)作为 FIN 比特(frame-fin)标示被接收,

说明WebSocket消息已经接收了数据 /data/(包括由片段组成的应用层数据)和类型 /type/ (碎片消息的第一帧)。

后来的数据帧必须被作为新的WebSocket解释。

扩展(extensions)可能改变数据如何读取的语义,https://tools.ietf.org/html/rfc6455#section-9

特别是包括 - 什么构成消息的边界。

在一个有效载荷(payload)中,扩展(extensions)为了在应用层数据前面添加扩展数据(extension data),可能也修改应用层数据(通过压缩它)。

服务器必须移除从客户端接收数据帧的掩码(masking)。https://tools.ietf.org/html/rfc6455#section-5.3

[ 发送数据,需要做的是编码,即 encode ]

要在一个WebSocket连接上发送包含 /data/ 的WebSocket消息,端点(endpoint)必须执行如下步骤。

1.端点(endpoint)必须保证WebSocket连接是 OPEN 状态(握手操作之后)。如果在任何端点上,WebSocket连接状态改变了,端点必须终止以下步骤。

2.端点必须封装 /data/ 到WebSocket帧中。https://tools.ietf.org/html/rfc6455#section-5.2

3.第一个数据帧的 opcode(frame-opcode)包含的数据必须 针对数据被接收者解释为文本数据或二进制数据 来设置为合适的值。https://tools.ietf.org/html/rfc6455#section-5.2

4.包含数据的最后帧FIN比特(frame-fin),必须被设置为1。https://tools.ietf.org/html/rfc6455#section-5.2

5.如果数据正在被客户端发送,帧必须被掩码。https://tools.ietf.org/html/rfc6455#section-5.3

6.如果针对WebSocket连接的扩展已经议定,额外的考虑因素可以按照这些扩展的定义来应用。https://tools.ietf.org/html/rfc6455#section-9

7.已形成的帧必须在底层网络连接上传输。

相信你也看明白了,这个过程是一个交互和阐述,实现需要遵照 section-5 的解释来 coding,而且只要实现功能,方式没有限制。

参考rfc:https://tools.ietf.org/html/rfc6455#section-6

Link:http://www.cnblogs.com/farwish/p/9011107.html

[INet] WebSocket 协议中的数据收发过程的更多相关文章

  1. FPGA的GTP(aurora 协议)高速串行接口数据收发(转)

    reference:https://blog.csdn.net/qq_40261818/article/details/83039829 PG046-Aurora 8B/10B  Logicore I ...

  2. SQL Server 向堆表中插入数据的过程

    堆表中  IAM 记录着的数据页,表的各个数据页之间没有联系.也就是说一个页面它不会知道自己的前一页是谁,也不知道自己的后一页是谁. 插入数据时先找到IAM页,再由pfs(page free spac ...

  3. WebSocket协议理解-数据包格式解析

    WebSocket 的诞生 做客户端开发时,接触最多的应用层网络协议,就是 HTTP 协议,而今天介绍的 WebSocket,下层和 HTTP 一样也是基于 TCP 协议,这是一种轻量级网络通信协议, ...

  4. WebSocket协议:5分钟从入门到精通

    一.内容概览 WebSocket的出现,使得浏览器具备了实时双向通信的能力.本文由浅入深,介绍了WebSocket如何建立连接.交换数据的细节,以及数据帧的格式.此外,还简要介绍了针对WebSocke ...

  5. WebSocket 协议

    1.1 背景知识 由于历史原因,在创建一个具有双向通信机制的 web 应用程序时,需要利用到 HTTP 轮询的方式.围绕轮询产生了 “短轮询” 和 “长轮询”. 短轮询 浏览器赋予了脚本网络通信的编程 ...

  6. WebSocket协议中文版

    WebSocket协议中文版 摘要 WebSocket协议实现在受控环境中运行不受信任代码的一个客户端到一个从该代码已经选择加入通信的远程主机之间的全双工通信.用于这个安全模型是通常由web浏览器使用 ...

  7. WebSocket协议详解及应用

    WebSocket协议详解及应用(七)-WebSocket协议关闭帧 本篇介绍WebSocket协议的关闭帧,包括客户端及服务器如何发送并处理关闭帧.关闭帧错误码及错误处理方法.本篇内容主要翻译自RF ...

  8. WebSocket 协议详解

    一.WebSocket 协议背景 早期,在网站上推送消息给用户,只能通过轮询的方式或 Comet 技术.轮询就是浏览器每隔几秒钟向服务端发送 HTTP 请求,然后服务端返回消息给客户端. 轮询技术一般 ...

  9. Websocket 协议解析

    WebSocket protocol 是HTML5一种新的协议.它是实现了浏览器与服务器全双工通信(full-duplex).          现 很多网站为了实现即时通讯,所用的技术都是轮询(po ...

随机推荐

  1. Android官方命令深入分析之hprof-conv

    hprof-conv工具可以将Android SDK工具生成的HPROF文件生成一个标准的格式,这样你就可以使用工具进行查看: hprof-conv [-z] <infile> <o ...

  2. JAVA之旅(十四)——静态同步函数的锁是class对象,多线程的单例设计模式,死锁,线程中的通讯以及通讯所带来的安全隐患,等待唤醒机制

    JAVA之旅(十四)--静态同步函数的锁是class对象,多线程的单例设计模式,死锁,线程中的通讯以及通讯所带来的安全隐患,等待唤醒机制 JAVA之旅,一路有你,加油! 一.静态同步函数的锁是clas ...

  3. 推荐一本不错的书《Sencha Ext JS 5 Bootcamp in a Book》

    原文:https://www.createspace.com/5425618 看了一下该书目录,感觉不错,Ext JS 5的重点内容都提及了,确实是一本学习Ext JS 5的好书,唯一遗憾的地方就是太 ...

  4. 【leetcode73】经典算法-Guess Number Higher or Lower

    题目描述: 从1-n中,随便的拿出一个数字,你来猜测. 提示 提供一个guess(int num)的api,针对猜测的数字,返回三个数值.0,-1,1 0;猜中返回num -1:比猜测的数值小 1:比 ...

  5. 基于FT5x06嵌入式Linux电容触摸屏驱动

    **************************************************************************************************** ...

  6. Linux Android 多点触摸协议 原文出自【比特网】,转载请保留原文链接:http://soft.chinabyte.com/os/71/12306571.shtml

    为了使用功能强大的多点触控设备,就需要一种方案去上报用户层所需的详细的手指触摸数据.这个文档所描述的多点触控协议可以让内核驱动程序向用户层上报任意多指的数据信息. 使用说明 单点触摸信息是以ABS承载 ...

  7. Dynamics CRM OData 查询超过50条记录的数据(Retrieving More than 50 records using OData)

    在通过ODdata方式获取CRM数据时,默认查询出来的results只有50条数据,可以通过JSON返回的Object中的"_next"属性作为URL循环获取直到该属性为空 示例代 ...

  8. 【翻译】Ext JS 4——Ajax和Rest代理处理服务器端一场和消息的方法

    原文:EXTJS4 - Handle Server-side exceptions and message from an Ajax or Rest proxy 作者:Raja 可能要处理的情况:su ...

  9. (八)喜马拉雅Demo引出的细节(代理模式和图片缩放)

    喜玛拉雅是一款电台APP,界面非常美观,通过模仿这一APP学习到很多细节. 1.图片导入后有些框内不全如何补全: 寻常的办法是再准备一张图片拖入,比较好的办法是右击已经导入的图片选择Show in F ...

  10. AngularJS进阶(十四)AngularJS灵异代码事件

    AngularJS灵异代码事件 注:请点击此处进行充电! 事情原委 router_sys.js源代码如下: 自己在html路由跳转的代码如下: 但是在实际路由过程中,却路由到了下面的状态,相应的页面中 ...