[英]How to get ip address of a client that connect to a websocket server in FastAPI?
我是 FastAPI 的新手。 我在 127.0.0.1:8000/abcd 和 ConnectionManager 对象中有一个 websocket 服务器。
class ConnectionManager:
def __init__(self):
self.active_connections: List[WebSocket] = []
async def connect(self, websocket: WebSocket):
await websocket.accept()
self.active_connections.append(websocket)
def disconnect(self, websocket: WebSocket):
self.active_connections.remove(websocket)
async def send_personal_message(self, message: str, websocket: WebSocket):
await websocket.send_text(message)
async def broadcast(self, message: str):
for connection in self.active_connections:
await connection.send_text(message)
manager = ConnectionManager()
和 websocket 服务器:
@router.websocket("/abcd")
async def websocket_endpoint(websocket: WebSocket):
await manager.connect(websocket)
如何获取客户端 Websocket 连接的 IP 地址? 以及如何将 active_connections 更改为字典,键是 IP 地址,值是 websocket? 谢谢
来自用于创建 websocket 的初始 HTTP 请求的信息存储在 Websocket 对象中并且可以被内省。 Starlette 提供了一些检索此信息的辅助方法。
@router.websocket("/abcd")
async def websocket_endpoint(websocket: WebSocket):
client_host = websocket.client.host
await manager.connect(websocket)
有关更多信息,您可以查看 Starlette Websocket 源代码:
以及它的超类 HTTPConnection 的来源:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.