为什么收到“ WebSocket连接已关闭:代码= 1000(确定),没有原因”

sha*_*hin 5 python websocket

我有以下服务器:

import os
import asyncio
import websockets


class Server:

    def get_port(self):
        return os.getenv('WS_PORT', '8765')

    def get_host(self):
        return os.getenv('WS_HOST', 'localhost')

    def start(self):
        return websockets.serve(self.handler, self.get_host(), self.get_port())

    async def handler(self, websocket, path):
        while True:
            async for message in websocket:
                await websocket.send(message)
Run Code Online (Sandbox Code Playgroud)

和客户:

import asyncio
import websockets


async def msg():
    async with websockets.connect('ws://localhost:8765') as websocket:
        await websocket.send('test message')

asyncio.get_event_loop().run_until_complete(msg())
Run Code Online (Sandbox Code Playgroud)

当我执行时,asyncio.get_event_loop().run_until_complete(msg())我收到以下错误:

websockets.exceptions.ConnectionClosed: WebSocket connection is closed: code = 1000 (OK), no reason
Run Code Online (Sandbox Code Playgroud)

另外app.py代码:

#!/usr/bin/env python3.6

import asyncio
from server import Server


if __name__ == '__main__':
    ws = Server()
    asyncio.get_event_loop().run_until_complete(ws.start())
    asyncio.get_event_loop().run_forever()
Run Code Online (Sandbox Code Playgroud)

PS添加while Truehandler下面的注释中建议。但我仍然收到该错误

Yoh*_*nes 5

你没有启动服务器

server.py:

import os
import asyncio
import websockets


class Server:

    def get_port(self):
        return os.getenv('WS_PORT', '8765')

    def get_host(self):
        return os.getenv('WS_HOST', 'localhost')


    def start(self):
        return websockets.serve(self.handler, self.get_host(), self.get_port())

    async def handler(self, websocket, path):
      async for message in websocket:
        print('server received :', message)
        await websocket.send(message)

if __name__ == '__main__':
  ws = Server()
  asyncio.get_event_loop().run_until_complete(ws.start())
  asyncio.get_event_loop().run_forever()
Run Code Online (Sandbox Code Playgroud)

client.py

import os
import asyncio
import websockets


class Server:

    def get_port(self):
        return os.getenv('WS_PORT', '8765')

    def get_host(self):
        return os.getenv('WS_HOST', 'localhost')


    def start(self):
        return websockets.serve(self.handler, self.get_host(), self.get_port())

    async def handler(self, websocket, path):
      async for message in websocket:
        print('server received :', message)
        await websocket.send(message)

if __name__ == '__main__':
  ws = Server()
  asyncio.get_event_loop().run_until_complete(ws.start())
  asyncio.get_event_loop().run_forever()
Run Code Online (Sandbox Code Playgroud)