websockets的原理
一、应用场景
http 协议 客户端发起请求的时候才会返回内容,如果要处理类似于聊天室的应用,需要客户端不间断的发起请求(轮询),非常占用服务器的性能。所以websocket出现了。
二、ws(wss)协议原理
1、特点
服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息
(1)建立在 TCP 协议之上,服务器端的实现比较容易。
(2)与 HTTP 协议有着良好的兼容性。默认端口也是80和443,并且握手阶段采用 HTTP 协议,因此握手时不容易屏蔽,能通过各种 HTTP 代理服务器。
(3)数据格式比较轻量,性能开销小,通信高效。
(4)可以发送文本,也可以发送二进制数据。
(5)没有同源限制,客户端可以与任意服务器通信。
(6)协议标识符是ws(如果加密,则为wss),服务器网址就是 URL。
2、使用:
1、浏览器(BOM)实现的不是v8引擎实现的,每次使用都需要自定义
var ws = new WebSocket(url,[protocol]);
2、webSocket.readyState属性返回实例对象的当前状态,共有四种
四种状态:
CONNECTING:值为0,表示正在连接。
OPEN:值为1,表示连接成功,可以通信了。
CLOSING:值为2,表示连接正在关闭。
CLOSED:值为3,表示连接已经关闭,或者打开连接失败。
js示例
switch (ws.readyState) {
case WebSocket.CONNECTING:
// do something
break;
case WebSocket.OPEN:
// do something
break;
case WebSocket.CLOSING:
// do something
break;
case WebSocket.CLOSED:
// do something
break;
default:
// this never happens
break;
}
3、http 和ws的关系:
就是在headers上添加了几个升级的协议包,做了一次协议升级,http常用ajax发包,但是ws不是,它是一个长链接协议,会等待服务器发包。http发的包经常是文本性信息(json/xml/纯文本/自定义/字节码)。但是ws发回来的是字节码(谷歌协议(protobuf(体积比较小常用于游戏协议))QQ的TLV 协议(通用,可以很好处理粘包) 自定义的格式)
套接字 tcp/udp(会有粘包的问题)
三、websocket的关键词
1、websocket本身就是一个关键词,因为每次使用都需要自定义
2、webSocket.readyState 返回实例对象的当前状态
3、webSocket.onopen 用于指定连接成功后的回调函数 (因为解密我们关心cookie/tooken等)
4、webSocket.onclose 用于指定连接关闭后的回调函数
5、webSocket.onmessage 指定收到服务器数据后的回调函数 (因为解密我们关心)
6、webSocket.send() 用于向服务器发送数据 (因为解密我们关心加密的内容和算法)
7、webSocket.bufferedAmount 判断发送是否结束
8、webSocket.onerror 用于指定报错时的回调函数
四、连接包和心跳包
连接包:webSocket.onopen
心跳包:如果出现断电等情况,需要让服务器知道我下线,不再等我,客户端每隔一段时间(等30s)发一个没有信息,用于告诉服务器我还在线。否则会被踢出。那么我们爬取的的时候还要注意心跳包的存在。
五、练习:网站(蝌蚪聊天室 http://www.wodexiaoshijie.com/kedou/)
1、步骤
抓包
分析包的信息
调试
本地运行
2、案例(虎牙)
抓包
1、搜索下断,搜到很多
2、搜索socket对象 hook send方法 直接快速
假设 p 是socket对象
// TODO hook
#p.send是被调用的函数名,而p.send_是被调用的功能
#hook就是在被调用的函数名和被调用的功能之间下一个断点
#从而实现一旦这个函数被调用,就会被下一个断点
3、hook
//控制台输入,用于hook
p.send_ = p.send;
//控制台输入,用于hook
p.send = function(x){
debugger;
return p.send_(x);
}
websockets的原理的更多相关文章
- .NET WebSockets 核心原理初体验
上个月我写了<.NET gRPC核心功能初体验>, 里面使用gRPC双向流做了一个打乒乓球的Demo, 实时双向这两个标签是不是很熟悉,对, WebSockets也可以做实时双向通信. 本 ...
- 如何仿造websocket请求?
之前两次singnalr. websocket实时推送相关: .NET WebSockets 核心原理初体验 SignalR 从开发到生产部署避坑指南 tag: 浏览器--->nginx--&g ...
- How Javascript works (Javascript工作原理) (五) 深入理解 WebSockets 和带有 SSE 机制的HTTP/2 以及正确的使用姿势
个人总结: 1.长连接机制——分清Websocket,http2,SSE: 1)HTTP/2 引进了 Server Push 技术用来让服务器主动向客户端缓存发送数据.然而,它并不允许直接向客户端程序 ...
- .NET应用程序调试—原理、工具、方法
阅读目录: 1.背景介绍 2.基本原理(Windows调试工具箱..NET调试扩展SOS.DLL.SOSEX.DLL) 2.1.Windows调试工具箱 2.2..NET调试扩展包,SOS.DLL.S ...
- 对.Net WebSocket 和Socket的原理的思考
今早上班路上接到了一个朋友的微信信息,问我对WebSocket 是否熟悉,一楞,印象之中没有用过这个类....来到公司后,得空问了一下度娘,原来这是一个随着HTML5推出的一种新协议,意义在于能实现浏 ...
- ASP.NET Core 运行原理解剖[4]:进入HttpContext的世界
HttpContext是ASP.NET中的核心对象,每一个请求都会创建一个对应的HttpContext对象,我们的应用程序便是通过HttpContext对象来获取请求信息,最终生成响应,写回到Http ...
- MQTT, XMPP, WebSockets还是AMQP?泛谈实时通信协议选型 good
Wolfram Hempel 是 deepstreamIO 的联合创始人.deepstreamIO 是一家位于德国的技术创业公司,为移动客户端.及物联网设备提供高性能.安全和可扩展的实时通信服务.文本 ...
- http-proxy-middleware使用方法和实现原理(源码解读)
本文主要讲http-proxy-middleware用法和实现原理. 一 简介 http-proxy-middleware用于后台将请求转发给其它服务器. 例如:我们当前主机A为http://loca ...
- web安全之XSS攻击原理及防范
阅读目录 一:什么是XSS攻击? 二:反射型XSS 三:存储型XSS 四:DOM-based型XSS 五:SQL注入 六:XSS如何防范? 1. cookie安全策略 2. X-XSS-Protect ...
- How Javascript works (Javascript工作原理) (七) WebAssembly 对比 JavaScript 及其使用场景
个人总结: 1.webworkers实现了用多线程浏览器来进行多线程操作js的能力. 2.web workers不能操作dom,window,document等对象,一般用于cpu计算型的任务. ...
随机推荐
- 第五章:Admin管理后台 - 1:自定制Admin
如果只是在admin中简单的展示及管理模型,那么在admin.py模块中使用admin.site.register将模型注册一下就好了: from django.contrib import admi ...
- 单台主机MySQL多实例部署
二进制安装mysql-5.7.26 [root@mysql ~]# cd /server/tools/ [root@mysql tools]# ll total 629756 -rw-r--r-- 1 ...
- 项目的依赖包(node_modules)删除
快速删除依赖包一共分为三部 1.打开命令行(管理员身份),执行 npm i -g npkill 2.cd 进入到想删除的项目中,执行 npkill 3.执行完成会进入到npkill页面,等待搜索完成, ...
- QML 信号与响应方法的总结
以下内容为本人的著作,如需要转载,请声明原文链接微信公众号「englyf」https://www.cnblogs.com/englyf/p/16748191.html 如果面试过程中,面试官想了解你对 ...
- Pytorch及Yolov5环境配置及踩坑
Pytorch及Yolov5环境配置及踩坑 1.何为Yolov5 yolo是计算机视觉方面用来进行目标检测的一个十分出名的开源框架,我搜不到官方的对此概括性的定义,但实际上也没什么必要,更重要的是会使 ...
- 关于Oracle-VM-VirtualBox的安装与说明
VirtualBox 是一款开源虚拟机软件.VirtualBox 是由德国 Innotek 公司开发,由Sun Microsystems公司出品的软件 使用Qt编写,在 Sun 被 Oracle 收购 ...
- 华为路由器vrrp(虚拟路由器冗余协议)基本配置命令
vrrp(虚拟路由器冗余协议)基本配置 int g0/0/0 vrrp vrid 1 virtual-ip 172.16.1.254 创建VRRP备份组,备份组号为1,配置虚拟IP为172.16.1. ...
- 一篇文章带你了解网页框架——Vue简单入门
一篇文章带你了解网页框架--Vue简单入门 这篇文章将会介绍我们前端入门级别的框架--Vue的简单使用 如果你以后想从事后端程序员,又想要稍微了解前端框架知识,那么这篇文章或许可以给你带来帮助 温馨提 ...
- Redis5种数据类型
字符串 @GetMapping("/string") public String stringTest(){ redisTemplate.opsForValue().set(&qu ...
- 二、Celery执行一步任务
二.Celery执行异步任务 2.1.基本使用 创建项目celerypro 创建异步任务执行文件celery_task: import celery import time backend='redi ...