0

複数のソケット ハンドラが同じ変数にアクセスできるようにする方法はありますか? 以下は、私が達成したいことを示す少しの疑似コードですが、 の UnboundLocalVariable 例外が発生してい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)

何かご意見は?前もって感謝します!

4

1 に答える 1

3

グローバル変数を使用する場合は、関数でそのように宣言する必要があります。そうしないと、各関数に独自のローカル変数が含まれます。

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'])

sessionSocket.IO イベントと通常の HTTP 要求ルートでの の動作にはいくつかの違いがあることに注意することが重要です。クライアントが接続すると、HTTP ユーザー セッションが Socket.IO 側にコピーされます。それ以降、Socket.IO イベントで行った変更は、そのクライアントによってトリガーされたイベントでのみ使用できます。Socket.IO イベントでセッションに加えられた変更は、HTTP 要求では表示されません。

于 2016-05-25T17:48:48.657 に答える