一:WebSocket

WebSocket 是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议。在 WebSocket API 中,浏览器和服务器只需要做一个握手的动作,然后,浏览器和服务器之间就形成了一条快速通道。两者之间就直接可以数据互相传送。,被广泛应用于对数据实时性要求较高的场景,如体育赛事播报、股票走势分析、在线聊天等。

  在WebSocket协议未出现之前,很多网站为了实现推送技术,所用的技术都是轮询。轮询是在特定的的时间间隔(如每1秒),由浏览器对服务器发出HTTP请求,然后由服务器返回最新的数据给客户端的浏览器。这种传统的模式带来很明显的缺点,即浏览器需要不断的向服务器发出请求,然而HTTP请求可能包含较长的头部,其中真正有效的数据可能只是很小的一部分,显然这样会浪费很多的带宽等资源。

  在这种情况下,HTML5定义了WebSocket协议,能更好的节省服务器资源和带宽,并且能够更实时地进行通讯

二:WebSocket握手协议

与HTTP协议不同的是,WebSocket协议只需要发送一次连接请求。请求的完整过程被称为握手,即客户端为了创建WebSocket连接而向服务器发送特定的HTTp请求并声明升级协议。WebSocket 是独立的、创建在 TCP 上的协议,通过HTTP/1.1 协议的101状态码进行握手,握手成功后才会转为WebSocket协议。

  WebSocket通信过程:

客户端发起握手请求

服务器端收到请求后验证并返回握手结果

连接建立成功,服务器端开始推送消息

三:websocket发送数据

import websocket

url = 'ws://demos.kaazing.com/echo'

ws = websocket.create_connection(url=url, timeout=15)

ws.send("以字符串发送数据") # 以字符串发送消息

ws.recv() # 接收消息,如果无消息将会堵塞,直到15s超时等待结束

ws.send_frame("以帧形式发送数据") # 以帧形式发送数据

ws.recv_data_frame() # 接收以帧发送的数据

ws.send_binary("以二进制格式发送数据".encode()) # 以二进制格式发送数据

ws.send_close() # 向服务器发送关闭连接请求,传入状态码及其原因

ws.close() # 关闭连接

看似很简单,但在实际中会伴随着很多通信的加密,这个需要在具体问题中具体分析,主要就三个方面:建立ws连接、发送消息、接收消息。

ws的应用在即时性较强的信息传播行业,如股票、彩票、赛事、通信中用的很普遍,但是其难度并不大。

WebSocket爬虫相关推荐

  1. websocket 爬虫

    前言 有些网站为了追求数据的实时更新,很多时候会采用 websocket 的方式,例如股票交易数据.数据货币交易数据等.关于websocket的机制,网上不乏相关资料.但关于websocket的爬虫文 ...

  2. Python websocket爬虫

    有些网站为了追求数据的实时更新,很多时候会采用 websocket 的方式,例如股票交易数据.数据货币交易数据等.关于websocket的机制,网上不乏相关资料.但关于websocket的爬虫文章,还 ...

  3. python websocket爬虫_Python如何爬取实时变化的WebSocket数据

    一.前言 作为一名爬虫工程师,在工作中常常会遇到爬取实时数据的需求,比如体育赛事实时数据.股市实时数据或币圈实时变化的数据.如下图: Web 领域中,用于实现数据'实时'更新的手段有轮询和 WebSo ...

  4. python websocket爬虫_详解python websocket获取实时数据的几种常见链接方式

    第一种, 使用create_connection链接,需要pip install websocket-client (此方法不建议使用,链接不稳定,容易断,并且连接很耗时) import time f ...

  5. python websocket爬虫_python爬虫----爬取阿里数据银行websocket接口

    业务需求:爬取阿里品牌数据银行的自定义模块==>>>人群透视==>>>查看报告==>>数据 最终获取页面: 页面获取情况如下: 绿色的就是我们需要模拟的 ...

  6. 爬虫之websocket数据爬取

    收集了大家的问题.我又重新写了一篇websocket的代码,并添加了注释,在文章最后.希望可以解决大家遇到的问题- websocket是最近开发很常用的技术之一,他可以一直保持着连接不断,但是你的页面 ...

  7. 前端周报:最经典的26个JavaScript面试题和答案;Vue3.0

    1.2018年,最经典的26个JavaScript面试题和答案 根据 Stack Overflow 的 2018 年度调查,JavaScript 连续六年成为最常用的编程语言.所以我们必须面对这样的现 ...

  8. 网络安全职业_我如何开始网络安全职业

    网络安全职业 Throughout my career as a cybersecurity professor, I often get questions about starting a car ...

  9. 网络安全ai能力建设_人工智能对网络安全的影响

    网络安全ai能力建设 Artificial intelligence (AI) and machine learning (ML) have shown significant progress in ...

最新文章

  1. Linux环境HBase安装与使用
  2. Windows内核HAL相关学习
  3. map反转key value
  4. 通过Java代码打开浏览器,本地文件目录以及ftp站点
  5. 算法--排序--大小写字母数字分离(桶排序思想)
  6. centos服务端ftp的搭建_centos下搭建ftp服务器
  7. LeetCode 852. Peak Index in a Mountain Array
  8. proteus 7.8下载链接
  9. Android Studio内置JDK源码关联和断点错乱问题解决
  10. 关于 flex 的资料
  11. 通俗地讲解傅立叶分析和小波分析间的关系
  12. pycharm无法创建虚拟环境Virtualenv(Directory ...\python not found)
  13. Python tkinter(GUI编程)模块最完整讲解(下)
  14. Keep悦动圈竞品分析报告(2)
  15. 小程序:获取页面高度问题
  16. 修改Linux中发送邮件中附件大小的限制
  17. 解决删除chrome注册表残留问题
  18. 异步mysql java_java – 异步http客户端(ning)创建更多线程?
  19. web前端布局练手项目
  20. Hartree-Fock理论(更新中)

热门文章

  1. Python-面向对象特性
  2. 如何在工作中鼓励持续的反馈
  3. 管易云与金蝶云星空对接集成盘点单查询连通物料盘点作业新增(改GK管易盘点对接金蝶盘点)
  4. Windows系统下解压.tar文件出错,提示:无法创建符号链接,可能需要以管理器身份运行winrar
  5. SIM卡的ICCID、IMSI
  6. 腾讯QQ手机浏览器内核开放
  7. JS 自定义用setTimeout 实现 setInterval功能
  8. 【Vue】小黑记事本
  9. 如何利用电位器控制舵机
  10. 最新cocos2d-x 3.0博客教学 小游戏[史上最坑爹的游戏] 003第二关:点击绿色按钮100下