WebSocket是一种网络通讯协议, 与HTTP不同的是,WebSocket提供全双工通信。 也就是说,传统的方式,只有当客户端发起请求后,服务器端才会发送数据, 而WebSocket可以让服务器主动发送数据给客户端,它是服务器推送技术的一种。
下图是WebSocket和HTTP的区别
pip install flask-socketio参考网址:
https://flask-socketio.readthedocs.io/en/latest/api.html https://blog.csdn.net/y472360651/article/details/116545273 https://blog.csdn.net/ieeso/article/details/105040207 https://xugaoxiang.com/2020/10/08/flask-19-socketio/ send 和 emit区别 send发送的是无命名的数据,而emit是发送有命名的数据,个人建议是emit 简单使用 on是注册接收前端消息的方法,message是指接收的信息的名称,和前端对应。 namespace是指一类的消息,和前端对应。 emit是指向前端发送消息,对应的消息的名称、数据和namespace。 默认的两个事件,connect和disconnect,当websocket连接成功和失败时,自动触发这两个事件。 namespace 命名空间
SocketIO Demo
Demo of SocketIO
from flask import Flask, render_template
from flask_socketio import SocketIO, emit
# pip install flask-socketio
app = Flask(__name__)
# app.config['SECRET_KEY'] = 'secret_key'
socketio = SocketIO()
socketio.init_app(app, cors_allowed_origins='*')
# socketio.init_app(app, cors_allowed_origins='http://localhost')
name_space = '/dcenter'
@app.route('/123')
def hello():
# How can I send a WebSocket message from here?
return 'Hello World!'
@app.route('/')
def index():
return render_template("./index.html")
@app.route('/push')
def push_once():
event_name = 'dcenter'
broadcasted_data = {"type":"delete","user_id":"123","data":"1111111111111"}
socketio.emit(event_name, broadcasted_data, broadcast=False, namespace=name_space)
return 'done!'
@socketio.on('connect', namespace=name_space)
def connected_msg():
print('client connected.')
@socketio.on('disconnect', namespace=name_space)
def disconnect_msg():
print('client disconnected.')
@socketio.on('my_event', namespace=name_space)
def mtest_message(message):
print(message)
emit('my_response',
{'data': message['data'], 'count': 1})
if __name__ == '__main__':
# app.run(host='0.0.0.0', port=5000, debug=True)
socketio.run(app, host='0.0.0.0', port=5000, debug=True)



