You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flask-SocketIO在群晖NAS运行时出现‘Invalid session error’求助

Flask-SocketIO 多进程会话无效问题解决

核心原因

从日志里的多进程PID(9999、10000、10004)可以看出,你是用uWSGI多进程模式运行服务的。Flask-SocketIO默认将会话数据存在单个进程的内存中,多进程之间无法共享会话信息,导致后续请求的进程识别不了之前创建的会话ID(sid),从而抛出Invalid session错误。而本地Windows运行时默认是单进程,所以没有这个问题。

解决方案

方案1:切换uWSGI为单进程模式(快速测试用)

修改uWSGI的启动配置或命令,强制使用单个进程处理请求:

  • 配置文件中添加:processes = 1
  • 启动命令中添加参数:--processes 1

这种方式无需额外依赖,适合测试场景,但无法利用多进程提升并发能力。

方案2:配置分布式会话存储(生产环境推荐)

使用Redis或Memcached作为跨进程的会话共享后端,让所有uWSGI进程都能访问到同一个会话数据:

1. 安装对应依赖

# 选择Redis作为后端
pip install flask-socketio[redis]

# 或选择Memcached作为后端
pip install flask-socketio[memcached]

2. 修改服务器端脚本

在初始化SocketIO对象时添加message_queue参数,指定会话存储地址:

from flask import Flask, render_template
from flask_socketio import SocketIO, emit

app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret!'
# 使用Redis作为会话存储(假设Redis运行在群晖本地默认端口6379)
socketio = SocketIO(app, async_mode=None, cors_allowed_origins="*",
                    ping_interval=60, ping_timeout=60,
                    logger=True, engineio_logger=True,
                    message_queue='redis://localhost:6379/0')

# 如果用Memcached,替换为:
# message_queue='memcached://localhost:11211/'

@app.route('/')
def index():
    return render_template('index.html')

@socketio.event
def my_event(message):
    emit('my_response', {'data': message + ': got it!'})

@socketio.event
def my_ping():
    emit('my_pong')

if __name__ == '__main__':
    socketio.run(app, port=8080)

3. 部署并启动存储服务

在群晖的Package Center中搜索安装Redis或Memcached,安装完成后启动对应的服务,确保服务在本地端口(Redis默认6379,Memcached默认11211)正常运行。

额外排查项

  1. 版本兼容性检查:客户端使用的Socket.IO版本是4.7.5,服务器端的Flask-SocketIO版本需要与之兼容(Flask-SocketIO 5.x对应客户端4.x)。执行pip show flask-socketio查看版本,若不匹配,执行pip install flask-socketio==5.3.6调整到兼容版本。
  2. 确认群晖IP正确性:客户端代码中io('http://192.168.0.20:8080')的IP需为群晖的实际局域网IP,确保客户端能正常访问该IP。

内容的提问来源于stack exchange,提问作者Ramon Ribes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 05:45:55