我可以得到Tornado中断开连接的客户端的IP地址和端口

问题描述:

当我的龙卷风服务器收到“连接打开”事件时,我将客户端的WebSocketHandler存储在players字典中,其关键字是和IP /端口组合。我可以得到Tornado中断开连接的客户端的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

每个连接会创建自己的WSHandler实例,因此简单地将数据存储上初始化实例:

def open(self): 
    self.id = self.get_id() 
    ...