一、websocket协议
WebSocket 是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议。HTML5 WebSocket 设计出来的目的就是要取代轮询和 Comet 技术,使客户端浏览器具备像 C/S 架构下桌面系统的实时通讯能力。
WebSocket 使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在WebSocket API 中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。
我们知道http是短连接的,反复建立和销毁连接比较耗费资源,另外http协议经常头部内容比主体内容还长也比较浪费资源;websocket可以认为就是一个内容使用载荷固定格式的socket长连接。
1.1 websocket协议报文
请求格式和 HTTP 请求很相似,但是还是稍有不同。
请求信息:
1、“Upgrade:WebSocket”:表示这是一个特殊的 HTTP 请求,请求的目的就是要将客户端和服务器端的通讯协议从 HTTP 协议升级到 WebSocket 协议。
2、“Sec-WebSocket-Key”:客户端浏览器需要向服务器端提供的握手信息。
应答消息:
1、“Upgrade:WebSocket”:同请求消息。
2、“Sec-WebSocket-Accept”:服务器端解析这些头信息,并在握手的过程中依据这些信息生成一个 16 位的安全密钥并返回给客户端,以表明服务器端获取了客户端的请求,同意创建 WebSocket 连接。一旦连接建立,客户端和服务器端就可以通过这个通道双向传输数据了。
1.2 webscoket的属性、方法和事件
二、客户端脚本编写
2.1 Python3.5版客户端代码
首先安装websocket-client-py3模块:
pip install websocket-client-py3
2.2.1 长连接调用方式
长连接关键方法:
ws.run_forever()
python的仿js websocket写法方式,自动重连发送指令,连接时间明显减少,基本做到无遗漏数据,与HTML js的ws连接实现一样。
import websocket
from websocket import ABNF
import json
import _thread
import time
def on_message(ws, message):
print(message)
def on_error(ws, error):
print(error)
def on_close(ws):
print("close connection")
def on_open(ws):
def run(*args):
pass
# content = {