簡體   English   中英

使用asyncio實現一個簡單的echo服務器

[英]Implement a simple echo server using asyncio

我正在嘗試使用asyncio實現一個簡單的回顯服務器。 這是我的嘗試:

import asyncio

async def process(reader, writer):
    while True:
        data = await reader.readline()
        writer.write(data)

loop = asyncio.get_event_loop()
listener = asyncio.start_server(process, host=None, port=2500)
loop.run_until_complete(listener)
loop.run_forever()

這將啟動服務器,並且我可以從多個客戶端連接,客戶端也將其消息回顯給他們。 問題是當我關閉一個客戶端時,回顯消息也停止出現在其他連接的客戶端上。 為什么會發生這種情況,我該如何防止呢?

服務器掛起,因為關閉連接時未退出循環。 約定是當網絡讀取功能不返回任何數據時,表示EOF。 服務器必須處理它,例如:

while True:
    data = await reader.readline()
    if not data:
        break
    writer.write(data)

沒有中斷,循環將一次又一次地執行,因為EOF狀態不會改變。

請注意,每個連接由其自己的process處理,該process由屬於該連接的讀取器和寫入器調用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM