如何在套接字处理程序之间共享变量?

时间:2016-05-25 16:50:02

标签: flask flask-socketio

有没有办法让多个套接字处理程序访问同一个变量?下面是一些伪代码,显示了我想要实现的内容,但我得到shared_variable的UnboundLocalVariable异常。

shared_variable = None

@socketio.on('initialize')
def initialize_variable(data):
    shared_variable = data

@socketio.on('print')
def print_variable():
    print str(shared_variable)

有什么想法?提前谢谢!

1 个答案:

答案 0 :(得分:2)

如果你想使用全局变量,你必须在函数中声明它,否则每个函数都有自己的局部变量。

shared_variable = None

@socketio.on('initialize')
def initialize_variable(data):
    global shared_variable
    shared_variable = data

@socketio.on('print')
def print_variable():
    global shared_variable
    print str(shared_variable)

但请注意,如果您这样做,您的所有客户都将共享相同的变量。一个更有趣的解决方案是使用用户会话来存储您的值,因为每个客户端都有自己的值。

@socketio.on('initialize')
def initialize_variable(data):
    session['shared_variable'] = data

@socketio.on('print')
def print_variable():
    print str(session['shared_variable'])

值得注意的是,session在Socket.IO事件与常规HTTP请求路由中的行为方式存在一些差异。当客户端连接时,HTTP用户会话被复制到Socket.IO端,从那时起,您在Socket.IO事件中所做的任何更改仅可用于该客户端触发的事件。在Socket.IO事件中对会话所做的更改在HTTP请求中不可见。