Из документации высокого уровня :
Модуль websockets.server
определяет простой WebSocket
серверный API.
serve()
возвращает ожидаемое.Ожидание этого приводит к экземпляру WebSocketServer
, который предоставляет close()
и wait_closed()
методы для завершения работы сервера и очистки его ресурсов.
На Python ≥ 3.5, serve()
также может использоваться как асинхронныйконтекстный менеджер.В этом случае сервер закрывается при выходе из контекста.
Поскольку @ user4815162342 уже определен, основная проблема заключается в том, что вы не ожидаете вызова к сопрограмме serve()
.
Поскольку вы используете Python v3.6.8, вы можете использовать асинхронный менеджер контекста, чтобы упростить реализацию.Преимущество этого заключается в том, что вам не нужно беспокоиться об обработке завершения работы, поскольку она обрабатывается автоматически.Вот объектно-ориентированная реализация простого эхо-сервера.
import asyncio
import signal
import websockets
class Server(object):
def __init__(self, host, port):
self.host, self.port = host, port
self.loop = asyncio.get_event_loop()
self.stop = self.loop.create_future()
self.loop.add_signal_handler(signal.SIGINT, self.stop.set_result, None)
self.loop.run_until_complete(self.server())
async def server(self):
async with websockets.serve(self.ws_handler, self.host, self.port):
await self.stop
async def ws_handler(self, websocket, path):
msg = await websocket.recv()
print(f'Received: {msg}')
await websocket.send(msg)
print(f'Sending: {msg}')
if __name__ == '__main__':
server = Server(host='localhost', port=6789)
В данный момент это будет выполняться до тех пор, пока пользователь не отправит прерывание, но вы можете настроить stop
future, чтобы удовлетворить.