一、前言
因项目需要,结识webSocket。本博客参考网上例子,单纯集成webSocket,初步了解Flask-SocketIO如何工作。
二、示例
python环境3.8、Flask-SocketIO 5.3.6
创建一个python package【websocket】,
1、socketio_ws.py
socketio_ws.py
from threading import Lock
from flask import Flask, render_template, session, request, copy_current_request_context
from flask_socketio import SocketIO, emit, join_room, leave_room, close_room, rooms, disconnect
socketio = SocketIO(cors_allowed_origins='*')
thread = None
thread_lock = Lock()
def background_thread():
count = 0
while True:
socketio.sleep(10)
count += 1
socketio.emit('my_response',
{
'data': 'Server generated event', 'count': count})
@socketio.event
def my_event(message):
session['receive_count'] = session.get('receive_count', 0) + 1
emit('my_response',
{
'data': message['data'], 'count': session['receive_count']})
@socketio.event
def my_broadcast_event(message):
session['receive_count'] = session.get('receive_count', 0) + 1
emit('my_response',
{
'data': message['data'], 'count': session['receive_count']},
broadcast=True)
@socketio.event
def join(message):
join_room(message['room'])
session['receive_count'] = session.get('receive_count', 0) + 1
emit('my_response',
{
'data': 'In rooms: ' + ', '.join(rooms()),
'count': session['receive_count']})
@socketio.event
def leave(message):
leave_room(message['room'])
session['receive_count'] = session.get('receive_count', 0) + 1
emit('my_response',
{
'data': 'In rooms: ' + ', '.join(rooms()),
'count': session['receive_count']})
@socketio.on('close_room')
def on_close_room(message):
session['receive_count'] = session.get('receive_count', 0) + 1
socketio.emit('my_response', {
'data': 'Room ' + message['room'] + ' is closing.',
'count': session['receive_count']},