实时弹幕的数据交互采用的基本都是 websocket 协议。
# 1. 什么是 WebSocket?
# 1.websocket 的基本概念
WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议,旨在解决传统 HTTP 通信模式中的一些局限性,特别是在需要实时数据交换的应用场景下。
全双工通信:WebSocket 允许客户端和服务器之间的双向通信,即客户端可以随时向服务器发送消息,服务器也可以随时向客户端发送消息,这与 HTTP 的单向请求 - 响应模式不同。
单个 TCP 连接:WebSocket 在建立连接时会使用 HTTP 协议进行一次握手,然后切换到 WebSocket 协议。这意味着在握手完成后,客户端和服务器之间的通信通过同一个 TCP 连接持续进行,不需要频繁的连接和断开。
# 2. WebSocket 的工作原理
- 握手阶段:客户端发送一个 HTTP 请求,要求升级协议到 WebSocket。如果服务器支持 WebSocket,它会返回一个响应,确认升级协议。这一阶段完成后,连接升级为 WebSocket 协议。
- 数据传输阶段:握手成功后,客户端和服务器之间可以通过这个连接发送和接收消息。消息是通过帧(frame)传输的,每个帧可以包含文本、二进制数据等。
- 关闭连接:任何一方都可以随时关闭连接,通知另一方连接将关闭。
# 3. WebSocket 的应用场景
- 实时聊天应用:如即时通讯工具,WebSocket 可以实现即时消息的收发。
- 实时游戏:如多人在线游戏,需要频繁的数据交换和低延迟通信。
- 股票行情推送:实时推送最新的股票价格变动。
- 在线协作工具:如 Google Docs 的实时协作编辑功能。
# 4. 优点
低延迟,效率高,实时性强
# 5. 方法
websocket 有四个事件和两个方法,两个方法是 send 和 close,四个事件分别是 open, message, error, close,其中,最关键的是 open 和 message。
open 事件就是初始化事件,当 websocket 连接刚刚建立后,将会进入到 open 事件中,在 open 事件中完成一些初始化的操作。
由于 websocket 是实时通信,因此会涉及到客户端和服务器之间的双向通信,也就是客户端向服务器发数据,服务器也可以向客户端发数据。
其中,客户端向服务器发数据是通过 websocket 的 send 方法实现的,服务器向客户端发数据,其实就是响应信息,当服务器响应数据时,会触发 message 事件,然后我们就可以在 message 事件中,处理服务器响应的数据。
具体可参考文档:https://developer.mozilla.org/zh-CN/docs/Web/API/WebSocket
# 2. playwright
playwright 库是一个用于自动化浏览器操作的库。
下面是一个简单的例子。
from playwright.sync_api import sync_playwright | |
def run(playwright): | |
# 启动 Chromium 浏览器 | |
browser = playwright.chromium.launch(headless=False) | |
# 创建一个新的浏览器页面 | |
page = browser.new_page() | |
# 导航到一个网页 | |
page.goto('https://example.com') | |
# 截图保存页面 | |
page.screenshot(path='example.png') | |
# 关闭浏览器 | |
browser.close() | |
# 使用 Playwright 运行自动化脚本 | |
with sync_playwright() as playwright: | |
run(playwright) |
# 3. 数据处理
最难的一步,一直懵懵懂懂的,搞不来,慢慢学习吧
protobuf 协议