2017-04-06 9 views
0

現在、私の竜巻サーバーは「接続が開かれました」イベントを受信すると、クライアントのWebSocketHandlerをplayers dictのキーとIP /ポートコンボで保存します。私がやりたいのは何トルネードで切断されたクライアントのIPアドレスとポートを取得することができます

players = {} 

class WSHandler(tornado.websocket.WebSocketHandler): 
    def open(self): 
     global players 
     players[self.get_id()] = self 

    def get_id(self): 
     ip = self.request.remote_ip 
     port = str(self.stream.socket.getpeername()[1]) 
     return ip + ":" + port 

は、その接続が閉じたときにdictからプレイヤーを削除しています。これと似たようなもの:

class WSHandler(tornado.websocket.WebSocketHandler): 
    def on_close(self): 
     global players 
     players.pop(self.get_id(), None) 

ポートにアクセスできないように見えるので、以前設定したIDを再作成できません。他の方法でポートを取得することは可能ですか?

+0

ストアIDをインスタンス属性として...? 'self.id = self.get_id()'その後、それは後で利用可能です。 (私の_believe_ Tornadoはそれぞれの接続に対して新しいWSHandlerインスタンスを作成するので、これが必要です。) – deceze

+0

パーフェクト、なぜ私はそれを考えなかったのか分かりません – sookie

答えて

1

各接続はとても簡単に初期設定でインスタンス上のデータを格納し、WSHandlerの独自のインスタンスを作成します。

def open(self): 
    self.id = self.get_id() 
    ... 
関連する問題