如何在套接字处理程序之间共享变量?
How to share variables between socket handlers?
有没有办法让多个套接字处理程序访问同一个变量?下面是一些伪代码,显示了我想要实现的目标,但是我得到了 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)
有什么想法吗?提前致谢!
如果要使用全局变量,必须在函数中声明它,否则每个函数都会有自己的局部变量。
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 请求中不可见。
有没有办法让多个套接字处理程序访问同一个变量?下面是一些伪代码,显示了我想要实现的目标,但是我得到了 shared_variable
.
shared_variable = None
@socketio.on('initialize')
def initialize_variable(data):
shared_variable = data
@socketio.on('print')
def print_variable():
print str(shared_variable)
有什么想法吗?提前致谢!
如果要使用全局变量,必须在函数中声明它,否则每个函数都会有自己的局部变量。
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 请求中不可见。