我試圖解析通過HTTP查詢的結果,最終可能返回數百萬行 - 每行需要解析。理想情況下,我希望從連接中一次讀取一行,並在我去時解析它 - 這基本上是一個FileHandle-esque迭代器,但現有的HTTP庫似乎都一次獲取所有內容,儘管可以a)保存到一個文件,或b)使用代碼ref處理塊。 A並不理想,因爲它是一種雙通解決方案(在傳輸數據後需要逐行讀取文件,並且可能不必要地佔用存儲空間)。 B是不理想的,因爲希望能夠返回每一行,而不是在代碼引用中處理它,而且塊不是行,所以LWP解決方案不會從LWP行重構中受益。我知道有非阻塞解決方案(使用AnyEvent和Coro),但這些解決方案似乎對非阻塞性更感興趣,而不是逐行處理。任何人都可以在這裏指出一個好的方向,還是我在錯誤的樹上咆哮?Perl中是否有任何HTTP連接迭代器?
0
A
回答
0
回調讓你可以做任何你想做的事情。你可以做到這一點,所以你緩衝輸入,並從緩衝區中讀取行。 Perl允許你打開任何文件句柄(使用tie
),包括字符串(使用open
)。無論如何,你可能發現的任何事情最終都會得到一塊,並將其變成線。
0
看看What is the easiest way in pure Perl to stream from another HTTP resource?上的接受答案我自己並沒有使用HTTP :: Lite,但它似乎支持基於回調的處理接收到的數據,所以應該爲你工作。
+0
感謝您的鏈接 - 回調顯然是做事情的完成方式,然後... – flightlessbird 2011-04-12 10:34:22
相關問題
- 1. 是否有任何用於C++的Lua表迭代器封裝?
- 2. 是否有RMIRegistry任何連接限制?
- 3. C#中是否有任何連接字符串解析器?
- 4. 迭代器連接性能
- 5. 分享迭代器是否可迭代?
- 6. webservice - http連接池是否有意義?
- 7. JMeter是否池HTTP連接?
- 8. 是否有任何pywin32 odbc連接器文檔可用?
- 9. 迭代器是否失效?
- 10. 是否有像「迭代迭代,如果它有元素,否則...」?
- 11. Python:「'Nonetype'是不可迭代的」沒有任何迭代
- 12. 是否有任何替代迭代通過兩個不同的數據表,其中有50K的記錄迭代
- 13. 如何檢查我的迭代器是否沒有任何東西
- 14. 迭代它時修改集合是否有任何危險?
- 15. 代理(如squid)如何知道連接是否使用http?
- 16. 是否可以在沒有任何響應的情況下關閉http連接?
- 17. 是否有替代重寫自連接?
- 18. 是否有替代內部連接
- 19. C中是否有任何庫函數來檢查Internet連接?
- 20. Ruby中是否有任何類似sql的連接?
- 21. PyPy中是否有任何替代sys.getsizeof()?
- 22. 在PHP中是否有任何替代*
- 23. 是否有任何替代方案沒有關閉與ExecuteStoreCommand的連接
- 24. 迭代websocketpp服務器中的所有連接
- 25. Red5chat連接迭代器失敗
- 26. 是否有可能在Lua中創建迭代器來迭代字典?
- 27. Iterable#iterator()是否返回一個新的迭代器或現有的迭代器?
- 28. 是否可以從任意迭代器(C++)獲取值類型?
- 29. 是否有MariaDB,Laravel 5.4連接器
- 30. 是否可以使用HTTP連接池?
感謝您的回覆 - 關於從回調中輸入緩衝區並從存取器讀出緩衝區的策略,什麼是停止這i)如果處理速度慢於讀取連接時消耗大量內存ii)錯誤地返回空行/如果解析超前於連接讀取,則顯示已達到緩衝區末尾? – flightlessbird 2011-04-12 10:33:25
@flesslessbird:i)什麼也沒有,但除了最複雜的處理之外,這是極其不可能的,因爲CPU比網絡通信要快幾個數量級。 ii)除非你編寫了你自己的緩衝區處理代碼,並且做得不正確,否則當緩衝區爲空而不是返回空行或EOF時,從緩衝區讀取將會被阻塞。 – 2011-04-12 15:32:28
感謝您提供豐富的回覆@Dave。因此,回顧一下,最好的方法是追加到一個sting緩衝區,這個sting緩衝區被打開到一個文件句柄進行讀取 - 每條讀取線都會阻塞,直到數據從連接追加到它。這應該工作得很好。 – flightlessbird 2011-04-13 17:15:20