我想擴展使用流式讀取器/寫入器(code)的python asyncio HTTP服務器示例。如果我理解正確,示例處理程序將從閱讀器讀取100個字節,並通過作者將其回送給客戶端。我正在嘗試讀取超過100個字節...閱讀,直到沒有更多的內容可以閱讀。從asyncio讀取StreamReader
我試圖讓read()函數讀取儘可能多的,
data = yield from reader.read()
,但似乎永遠阻止。所以,我想讀塊,直到達到EOF,
while not reader.at_eof():
data += yield from reader.read(100)
,雖然這檢索更多的數據,它似乎在讀呼叫阻塞退出while循環代替。
如何使用流讀取器從客戶端獲取整個消息?
我也嘗試過,但沒有成功。謝謝。 – jdowner
你正在發送HTTP/1.1或HTTP/1.0請求/響應嗎?你能發佈一個完整的例子嗎? –
所以我對asyncio實現進行了一些探索,似乎在流中調用read()並不是這種情況下的方式,因爲除非客戶端主動關閉連接,否則EOF永遠不會被注入到流中。你提供的例子基本上是asyncio試圖自己做的,但問題是來自HTTP請求的數據包含帶有b'\ r \ n'形式的行尾的字節,所以'if not chunk'條件是從來沒有真實的,即使數據只有行結束。 – jdowner