我正在根据flask-SocketIO文档使用自定义名称空间进行多通道聊天。为了存储通道,我使用的会话变量在我的路由/函数中都没有问题,但是在@ socketio.on()中,该变量不起作用(如果我将命名空间字符串拼写为@的话,它可以正常工作socketio.on(“ send”,namespace =“ / test”)。为什么有任何想法???
import os import eventlet import json from flask import Flask, render_template, request, jsonify, session from flask_session import Session from tempfile import mkdtemp from flask_socketio import SocketIO, emit, Namespace app = Flask(__name__) app.config["SECRET_KEY"] = os.getenv("SECRET_KEY") app.config["SESSION_FILE_DIR"] = mkdtemp() app.config["SESSION_PERMANENT"] = False app.config["SESSION_TYPE"] = "filesystem" Session(app) socketio = SocketIO(app, logger=True, engineio_logger=True) channels = [] messagetext = None # [OTHER FUNCTIONS SETTING session["namespace"] ] @socketio.on("send", namespace = session["namespace"]) def handle_send(data): messagetext = data["message"] print("THE MESSAGE IS :"+messagetext) emit("broadcast message", {"message": messagetext}, broadcast = True) if __name__ == '__main__': socketio.run(app, debug=True)
这里是客户端JavaScript代码段,如果相关的话:
function connectSocket(channel) {
var socket = io(`/${channel}`);
socket.on('connect', () => {
document.querySelector('#current_channel').innerHTML = channel;
document.querySelector('#send_message').onsubmit = () => {
var message = document.querySelector('#message').value;
console.log(`MESSAGE IS ${message}`);
socket.emit('send', {'message': message});
return false;
}
});
}
我正在根据flask-SocketIO文档使用自定义名称空间进行多通道聊天。为了存储频道,我使用会话变量,这些变量在我的路由/ ...中均无问题。
session
没有任何意义。