Тема: Як ідентифікувати клієнтів у вигляді WebSocketServerProtocol?
Є такий достатньо відомий код
import asyncio
import websockets
from websockets import WebSocketServerProtocol
import logging, sys #... і ще там що треба
class Serverws:
clients=set()
hostip = None
hostport = None
def __init__(self, hostip, hostport):
self.hostip = hostip
self.hostport = hostport
async def register(self, ws :WebSocketServerProtocol) -> None:
self.clients.add(ws)
for client in self.clients:
print(ws.remote_address)
async def unregister(self, ws: WebSocketServerProtocol) -> None:
self.clients.remove(ws)
async def send_to_clients(self, message: str) -> None:
if self.clients:
await asyncio.wait([client.send(message) for client in self.clients])
async def ws_handler(self, ws: WebSocketServerProtocol, uri: str) -> None:
await self.register(ws)
try:
await self.distribute(ws)
finally:
await self.unregister(ws)
async def distribute(self, ws: WebSocketServerProtocol) -> None:
async for message in ws:
await self.send_to_clients(message)
# і от раніше там було таке:
serverr = Serverws('localhost',8765)
start_server = websockets.serve(serverr.ws_handler, serverr.hostip, serverr.hostport)
asyncio.get_event_loop().run_until_complete(start_server)
asyncio.get_event_loop().run_forever()
Він вміє ехо. Тобто, він вміє приймати конект (при цьому друкувати ('::1', 51682, 0, 0)) і робити ехо.
Як його розширити щоб, наприклад, не усим слати меседж (зараз він шле ехо всим, включно з автором месаги), а усим ОКРІМ автора. А далі - усим, хто є в фільтрі (скажімо, в вручну створеному, чи з файла).
Клієнти зберігаються в множині clients=set(), але то ті, що зайшли і відомі... як зберігти якогось, хто, наприклад, пройшов авторизацію?
Оцей, в якого ремоут адрес ('::1', 51682, 0, 0) - як його можна ідентифікувати, скажімо, якщо він зайде вже з іншого компа?