• 实现及原理

Websocket是一种在单个TCP连接上进行全双工通讯的协议。 WebSocket 首先发起一个 HTTP 请求,在请求头加上 `Upgrade` 字段,该字段用于改变 HTTP 协议版本或者是换用其他协议,这里我们把 `Upgrade` 的值设为 `websocket` ,将它升级为 WebSocket 协议

  • 如何建立通信

握手过程: websocket-client端通过ws协议向websocket-server端发起连接请求前,首先在自己的请求头中添加Sec-Websocket-Key键值对,值为根据自己账号通过一定的方式生成的字符串,client端发送自己的key后,server端取出并保存该字符串后,将该字符串与魔法字符串拼接后先后经过sha1、base64加密后获得与此client端的通信密钥保存并发送给client端,client端在本地保存此通信密钥,此时server端与client端完成握手。

通信过程(解密): server端或client端在收到加密信息(字节类型)后,将加密信息的第二个字节与127进行与位运算,根据位运算的结果分为=127、=126、<=125三种情况,根据不同的位运算结果分别取出其掩码(mask)部分和数据部分,将掩码部分与数据进行^(异或)运算即得到真实的数据(字节类型),根据编码类型进行解码后即得到可读性的数据。

通信过程(加密):

import struct
msg_bytes = "hello".encode("utf8")
token = b"\x81"
length = len(msg_bytes)
if length < 126:
token += struct.pack("B", length)
elif length == 126:
token += struct.pack("!BH", 126, length)
else:
token += struct.pack("!BQ", 127, length)
msg = token + msg_bytes
print(msg)

websocket简单理解的更多相关文章

  1. [转]简单理解Socket

    简单理解Socket 转自 http://www.cnblogs.com/dolphinX/p/3460545.html  题外话 前几天和朋友聊天,朋友问我怎么最近不写博客了,一个是因为最近在忙着公 ...

  2. git的简单理解及基础操作命令

    前端小白一枚,最近开始使用git,于是花了2天看了廖雪峰的git教程(偏实践,对于学习git的基础操作很有帮助哦),也在看<git版本控制管理>这本书(偏理论,内容完善,很不错),针对所学 ...

  3. 简单理解Struts2中拦截器与过滤器的区别及执行顺序

    简单理解Struts2中拦截器与过滤器的区别及执行顺序 当接收到一个httprequest , a) 当外部的httpservletrequest到来时 b) 初始到了servlet容器 传递给一个标 ...

  4. Js 职责链模式 简单理解

    js 职责链模式 的简单理解.大叔的代码太高深了,不好理解. function Handler(s) { this.successor = s || null; this.handle = funct ...

  5. Deep learning:四十六(DropConnect简单理解)

    和maxout(maxout简单理解)一样,DropConnect也是在ICML2013上发表的,同样也是为了提高Deep Network的泛化能力的,两者都号称是对Dropout(Dropout简单 ...

  6. Deep learning:四十二(Denoise Autoencoder简单理解)

    前言: 当采用无监督的方法分层预训练深度网络的权值时,为了学习到较鲁棒的特征,可以在网络的可视层(即数据的输入层)引入随机噪声,这种方法称为Denoise Autoencoder(简称dAE),由Be ...

  7. 简单理解dropout

    dropout是CNN(卷积神经网络)中的一个trick,能防止过拟合. 关于dropout的详细内容,还是看论文原文好了: Hinton, G. E., et al. (2012). "I ...

  8. 我们为之奋斗过的C#-----C#的一个简单理解

    我们首先来简单叙述一下什么是.NET,以及C#的一个简单理解和他们俩的一个区别. 1 .NET概述 .NET是Microsoft.NET的简称,是基于Windows平台的一种技术.它包含了能在.NET ...

  9. 简单理解ECMAScript2015中的箭头函数新特性

    箭头函数(Arrow functions),是ECMAScript2015中新加的特性,它的产生,主要有以下两个原因:一是使得函数表达式(匿名函数)有更简洁的语法,二是它拥有词法作用域的this值,也 ...

随机推荐

  1. vue轮播,vue-awesome-swiper动态数据渲染,loop无效,轮循无效

    解决办法:在渲染数组数据前.判断是否为空 v-if="slideList.length>1" <template> <div class="ban ...

  2. caffe安装

    安装caffe的时候一定要保持一个乐观的心态,不然容易放弃人生.由于自己是装完才写的,所以并没有截图. 平台:Window7 硬件:NVIDIV quaro M4000 软件:Visual Studi ...

  3. vscode setting.jsonxx

    // Place your settings in this file to overwrite the default settings { "files.autoGuessEncodin ...

  4. apply、call、bind的区别

    apply.call.bind这三种方法一般用来改变this指向. apply()方法接收两个参数,一个是函数运行的作用域this,另一个是参数数组 call()方法接收两个参数,一个是函数运行的作用 ...

  5. Aop理解 ioc理解

    AOP 把 [核心代码]和[非核心代码]分离 提高开发的效率 java设计模式: https://www.cnblogs.com/malihe/p/6891920.html N+1就是: 1:一条查询 ...

  6. Windows查看Java内存使用情况

    Windows查看Java程序运行时内存使用情况 1.在cmd命令窗口输入 jconsole  ,弹出Java监视和管理控制台窗口 2.连接本地进程,首先需要知道想查看的进程ID ( pid ) 在c ...

  7. svn提示文件 is already locked

    有时候在提交代码或者更新代码的时候svn会报错误,提示请执行"clean up",但是有时候执行"clean up"也没有什么用,不过当执行"clea ...

  8. be动词的形式和用法

    Be动词的形式: be, is, am, are, was, were, being, been 1.The man is back 2.They are back 3.He was back 4.T ...

  9. Linux目录路径知识

    改IP为静态IP

  10. tp5阿里云短信发送

    到阿里云下载php版demo,下完整版的,不是轻量级的; 框架  :TP5 把下载下来的文件放到extend里面 文件名:alimsg 里面的文件 import('alimsg.api_demo.Sm ...