グローバル変数を使用する場合は、関数でそのように宣言する必要があります。そうしないと、各関数に独自のローカル変数が含まれます。
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 要求では表示されません。