WebSocket是一种通过单个TCP连接提供全双工通信信道的协议。2011年,IETF将WebSocket协议标准化为RFC 6455,W3C正在对Web IDL中的WebSocket API进行标准化。

WebSocket通信由消息和应用程序代码组成,不需要担心缓冲、解析和重构接收到的数据。例如,如果服务器发送1MB的有效负载,则只有当整个消息在客户端上可用时,才会调用应用程序的onmessage回调。

此外,WebSocket协议不对应用程序有效负载进行任何假设和约束:文本和二进制数据都是公平的游戏。在内部,协议只跟踪两个部分

当浏览器接收到新消息时,它会自动转换为基于文本的数据的DOMString对象,或二进制数据的Blob对象,然后直接传递给应用程序。唯一的其他选项,作为客户端的性能提示和优化,是告诉浏览器将接收到的二进制数据转换为ArrayBuffer而不是Blob:

一旦建立了WebSocket连接,客户端就可以随意发送和接收UTF-8和二进制消息。WebSocket提供双向通信信道,允许通过同一TCP连接在两个方向上传递消息:

Example traffic示例流量

Connection setup连接设置

To establish a WebSocket connection, the client sends a WebSocket handshake request, for which the server returns a WebSocket handshake response, as shown in the example below.为了建立WebSocket连接,客户端发送一个WebSocket握手请求,服务器将为该请求返回一个WebSocket握手响应,如下例所示。

Client request (just like in HTTP, each line ends with \r\n and there must be an extra blank line at the end):客户端请求(就像在HTTP中一样,每一行都以\r\n结尾,并且结尾必须有一个额外的空行):

GET / HTTP/1.1
Host: 192.168.43.135:12345
Connection: Upgrade
Pragma: no-cache
Cache-Control: no-cache
Upgrade: websocket
Origin: file://
Sec-WebSocket-Version: 13
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36
Accept-Encoding: gzip, deflate, sdch
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.6,en;q=0.4
Sec-WebSocket-Key: bKdPyn3u98cTfZJSh4TNeQ==
Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits

Server response:服务器响应:

HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: 4EaeSCkuOGBy+rjOSJSMV+VMoC0=
WebSocket-Origin: file://
WebSocket-Location: ws://192.168.43.135:12345/

Data transmission数据传输

Here is an example of data transmission between a Python WebSocket Server and JavaScript client.下面是Python WebSocket服务器和JavaScript客户端之间的数据传输示例。

An example from server to client:从服务器到客户端的示例:

Frame 7: 79 bytes on wire (632 bits), 79 bytes captured (632 bits)
Ethernet II, Src: Vmware_8a:3d:a7 (00:0c:29:8a:3d:a7), Dst: Vmware_c0:00:08 (00:50:56:c0:00:08)
Internet Protocol Version 4, Src: 192.168.43.135, Dst: 192.168.43.1
Transmission Control Protocol, Src Port: 12345, Dst Port: 50999, Seq: 205, Ack: 510, Len: 25
WebSocket
1... .... = Fin: True
.000 .... = Reserved: 0x0
.... 0001 = Opcode: Text (1)
0... .... = Mask: False
.001 0111 = Payload length: 23
Payload
JavaScript Object Notation
Line-based text data
Welcome, 192.168.43.1 !

An example from client to server:从客户端到服务器的示例:

Frame 9: 72 bytes on wire (576 bits), 72 bytes captured (576 bits)
Ethernet II, Src: Vmware_c0:00:08 (00:50:56:c0:00:08), Dst: Vmware_8a:3d:a7 (00:0c:29:8a:3d:a7)
Internet Protocol Version 4, Src: 192.168.43.1, Dst: 192.168.43.135
Transmission Control Protocol, Src Port: 50999, Dst Port: 12345, Seq: 510, Ack: 230, Len: 18
WebSocket
1... .... = Fin: True
.000 .... = Reserved: 0x0
.... 0001 = Opcode: Text (1)
1... .... = Mask: True
.000 1100 = Payload length: 12
Masking-Key: e17e8eb9
Masked payload
Payload
JavaScript Object Notation
Line-based text data
test message


参考文件:
https://hpbn.co/websocket/
https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API/Writing_WebSocket_servers
https://www.rfc-editor.org/rfc/rfc6455
https://wiki.wireshark.org/WebSocket.md

websocket 数据分析的更多相关文章

  1. 转:鏖战双十一-阿里直播平台面临的技术挑战(webSocket, 敏感词过滤等很不错)

    转自:http://www.infoq.com/cn/articles/alibaba-broadcast-platform-technology-challenges 鏖战双十一-阿里直播平台面临的 ...

  2. Net Core SignalR 测试,可以用于unity、Layair、白鹭引擎、大数据分析平台等高可用消息实时通信器。

    SignalR介绍 SignalR介绍来源于微软文档,不过多解释.https://docs.microsoft.com/zh-cn/aspnet/core/signalr/introduction?v ...

  3. python数据分析经常使用的库

    这个列表包含数据分析经常使用的Python库,供大家使用.1. 网络通用urllib -网络库(stdlib).requests -网络库.grab – 网络库(基于pycurl).pycurl – ...

  4. iNeuOS工业互联平台,.NETCore开发的视频服务组件iNeuVideo,RTSP转WebSocket

    目       录 1.      概述... 2 2.      将来集成到iNeuOS平台演示... 3 3.      iNeuVideo结构... 3 4.      iNeuVideo部署及 ...

  5. iNeuOS工业互联平台,WEB组态(iNeuView)集成rtmp和websocket视频元件,支持海康、大华等摄像头实时显示视频

    目       录 1.      概述... 1 2.      平台演示... 2 3.      硬件摄像头... 2 4.      视频流协议转换管理... 2 5.      组态视频元件 ...

  6. 漫扯:从polling到Websocket

    Http被设计成了一个单向的通信的协议,即客户端发起一个request,然后服务器回应一个response.这让服务器很为恼火:我特么才是老大,我居然不能给小弟发消息... 轮询 老大发火了,小弟们自 ...

  7. 细说WebSocket - Node篇

    在上一篇提高到了 web 通信的各种方式,包括 轮询.长连接 以及各种 HTML5 中提到的手段.本文将详细描述 WebSocket协议 在 web通讯 中的实现. 一.WebSocket 协议 1. ...

  8. java使用websocket,并且获取HttpSession,源码分析

    转载请在页首注明作者与出处 http://www.cnblogs.com/zhuxiaojie/p/6238826.html 一:本文使用范围 此文不仅仅局限于spring boot,普通的sprin ...

  9. WebSocket - ( 一.概述 )

    说到 WebSocket,不得不提 HTML5,作为近年来Web技术领域最大的改进与变化,包含CSS3.离线与存储.多媒体.连接性( Connectivity )等一系列领域,而即将介绍的 WebSo ...

  10. php+websocket搭建简易聊天室实践

    1.前言 公司游戏里面有个简单的聊天室,了解了之后才知道是node+websocket做的,想想php也来做个简单的聊天室.于是搜集各种资料看文档.找实例自己也写了个简单的聊天室. http连接分为短 ...

随机推荐

  1. Redis缓存之spring boot 部署

    一.环境准备工作 # 1.JDK 安装与环境变量# 下载相应的jdk软件包,然后解压安装,我这里包名称为:jdk-8u102-linux-x64.tar.gz [root@localhost data ...

  2. C# winfrom 添加Log4Net日志库

    简介:log4net库是Apache log4j框架在Microsoft .NET平台的实现,是一个帮助程序员将日志信息输出到各种目标(控制台.文件.数据库等)的工具.当项目发布之后遇到一些问题,无法 ...

  3. Javascript 基础知识,ajax,面向对象

    Javascript 数据类型 数据类型 基本数据类型 数字,字符串,布尔值 undefine null undefined的常见情形:ES6新语法提供的对象解构赋值应用讲解 1.1 对象属性不存在 ...

  4. 2022-3-24内部群每日三题-清辉PMP

    1.敏捷团队成员认为每日站会并不会增加价值,是因为小组规模太大.在回顾会议上,他们提出将现有的项目团队分解成更小的小组.Scrum主管应该怎么做? A.缩小团队规模,使站会更易于管理. B.在采取行动 ...

  5. hashtable被弃用了

      Hashtable的作者:HashMap的作者:Hash Map的作者比Hashtable的作者多了著名顶顶的并发大神Doug Lea.他写了util.concurrent包.著有并发编程圣经Co ...

  6. Flask的介绍、安装和使用

    Flask的介绍 Flask其实就是Python-web中的一个框架,也就是说Flask是一个工具,提供了库和技术来让你建立一个web的应用程序.这个程序可以使一些web页面.博客.基于web的日历应 ...

  7. SQL server 清空数据库所有表

    use [数据库名]GOdeclare @sql varchar(8000)while (select count(*) from sysobjects where type='U')>0beg ...

  8. 手动导入jar

    mvn install:install-file -Dfile=D:\java_tools\maven\maven-repository\cn\afterturn\easypoi-base-cy\4. ...

  9. xlwings简单使用

    xlwings能够非常方便的读写Excel文件中的数据,并且能够进行单元格格式的修改 xlwings基本操作 打开已有的Excel文档 # 导入xlwings模块 # 打开Excel程序,默认设置:程 ...

  10. nvm在windows下安装与使用

    1.卸载本地已经安装的所有node 2.nvm下载 下载地址https://github.com/coreybutler/nvm-windows ,选择nvm-noinstall.zip 放在本地盘, ...