要在 Tornado 的 WebSocketHandler 中记录客户端信息,你可以使用实例属性来保存客户端相关的数据。以下是一个示例,演示了如何记录客户端的信息:
import tornado.ioloop
import tornado.web
import tornado.websocket
# WebSocketHandler 类处理 WebSocket 连接
class WebSocketHandler(tornado.websocket.WebSocketHandler):
connections = set()
# 当有新的 WebSocket 连接建立时,将连接添加到连接集合中
def open(self):
self.connections.add(self)
self.client_info = {} # 用于保存客户端信息的字典
self.client_info['ip'] = self.request.remote_ip
print(f"New WebSocket connection established from {self.client_info['ip']}")
# 当收到消息时,将消息发送给所有连接的客户端
def on_message(self, message):
print(f"Received message from {self.client_info['ip']}: {message}")
self.send_message_to_all_clients(message)
# 当连接关闭时,将连接从连接集合中移除
def on_close(self):
self.connections.remove(self)
print(f"WebSocket connection closed from {self.client_info['ip']}")
# 将消息发送给所有连接的客户端
def send_message_to_all_clients(self, message):
for connection in self.connections:
connection.write_message(message)
# 创建应用程序并定义 WebSocket 路由
app = tornado.web.Application([
(r'/websocket', WebSocketHandler),
])
if __name__ == '__main__':
# 启动应用程序
app.listen(8888)
tornado.ioloop.IOLoop.current().start()
在上面的示例中,我们在 open()
方法中添加了一个实例属性 client_info
,它是一个字典用于保存客户端信息。在这个示例中,我们将客户端的 IP 地址存储在 client_info
字典中。
当有新的 WebSocket 连接建立时,我们从 self.request.remote_ip
获取客户端的 IP 地址,并将其存储在 client_info
字典中。
在 on_message()
方法中,我们打印出客户端 IP 地址和接收到的消息。
在 on_close()
方法中,我们打印出客户端 IP 地址以及 WebSocket 连接关闭的消息。
通过这种方式,你可以记录客户端的信息,并在需要时使用该信息进行处理或日志记录。
请注意,上面的示例仅记录了客户端的 IP 地址作为示例。你可以根据需要扩展 client_info
字典来保存其他相关的客户端信息,例如用户身份、连接时间等。
评论内容