python обработка асинхронного соединения происходит только один раз - PullRequest
0 голосов
/ 17 февраля 2020

Пытаюсь понять это поведение, но документация не сильно помогла. Я написал код ниже. если я установлю sh соединение с портом и затем введу слово hello, меня встретит hey there! - однако, если я впоследствии наберу hello world для этого соединения, ничего не произойдет - я ожидал, что код будет вызывается снова, когда поступают новые данные, поэтому, если я снова отправлю hello, то поведение будет повторяться (ie. write hey there)

import asyncio

class Service():
    def __init__(self, port = 18247):
        self.port = port

    async def serve(self):
        srv = await asyncio.start_server(self.handle_client, '0.0.0.0', self.port)
        await srv.serve_forever()

    async def handle_client(self, reader, writer):
        result = await reader.readline()

        result = result.decode('utf-8')
        if result.startswith('hello'):
            writer.write(str.encode('hey there!'))

def main():
    srv = Service()
    asyncio.run(srv.serve())

if __name__ == '__main__':
    main()
...