构建web
服务时,有时候需要即时更新网页内容,如:通知、新加信息等,通过AJAX
可以实现不刷新网页的情况下数据更新,但对于数据何时需要更新,一种方式是客户端不断轮询,另一种方式是服务端数据更新后通知客户端进行数据更新,显然后者更优雅,消耗更少资源,这么好的方式显然已经被实现了,DuangDuangDuang
,WebSockets
登场~
WebSocket一种在单个 TCP 连接上进行全双工通讯的协议。
WebSocket 是独立的、创建在 TCP 上的协议,和 HTTP 的唯一关联是使用 HTTP 协议的101状态码进行协议切换,
使用的 TCP 端口是80,可以用于绕过大多数防火墙的限制。
WebSocket 使得客户端和服务器之间的数据交换变得更加简单,允许服务端直接向客户端推送数据而不需要客户端进行请求,
在 WebSocket API 中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,
并允许数据进行双向传送。
对于flask
来说,可以通过flask_socketio
实现上述效果,首先是pip install flask_socketio
(flask_socketio)。
Demo
实现如下:
# app.py
import datetime
from threading import Lock
from flask import Flask, render_template
from flask_socketio import SocketIO, emit
app = Flask(__name__, template_folder="./")
socketio = SocketIO(app)
_thread = None
lock = Lock()
@app.route("/")
def index():
return render_template("index.html"