Я делаю простой чат, используя websockets
на клиенте и flask
+ flask_sockets
на сервере.
Когда клиент получает свой токен, подключается к веб-сокету и отправляет сообщение, появляется websockets.exceptions.ConnectionClosed
Код клиента:
async def main(token):
async with websockets.connect(f'ws://localhost:5000/ws?token={token}') as ws:
await ws.send(input('> '))
print(await ws.recv())
if __name__ == '__main__':
username = input('Your username >>> ').strip()
token = get(f'http://localhost:5000/getToken?username={username}').text
print(f"Got token: {token}")
while True:
asyncio.get_event_loop().run_until_complete(main(token))
Обработчик сервера WebSocket:
class User:
ws = None
def __init__(self, username):
self.username = username
@sockets.route('/ws')
def alert(ws):
token = request.args.get('token')
if token in users:
user = users[token]
user.ws = ws
print(f'Connected user {token}')
print(users[token].username, '>>>', ws.receive())
Я ожидаю, что соединение останется открытым, поэтому, когда появится новое сообщение, сервер отправит его всем клиентам, используя что-то вроде
for user in users:
user.ws.send(message)
PS Это мой первый пост в StackOverflow, поэтому любойисправления приветствуются:)