我需要編寫一個使用perl的套接字服務器,它將在64位linux(2.6x內核)上運行。有沒有一個庫支持IO完成端口和Linux上的一些等價物?使用Perl的高性能套接字服務器
我需要聽多個端口。 8000-8100有沒有一個聰明的方法呢?
該協議必須使用長度字節。
你推薦什麼線程庫?我使用基於多任務協作的線程調度程序在Windows上編寫了類似的東西。我的意思是我想避免爲每個套接字創建一個線程來處理超過10.000個同步節點。
在此先感謝。
我需要編寫一個使用perl的套接字服務器,它將在64位linux(2.6x內核)上運行。有沒有一個庫支持IO完成端口和Linux上的一些等價物?使用Perl的高性能套接字服務器
我需要聽多個端口。 8000-8100有沒有一個聰明的方法呢?
該協議必須使用長度字節。
你推薦什麼線程庫?我使用基於多任務協作的線程調度程序在Windows上編寫了類似的東西。我的意思是我想避免爲每個套接字創建一個線程來處理超過10.000個同步節點。
在此先感謝。
Perl中的線程化通常不會提供建議。
相反,對於高性能,您應該考慮查看non blocking
或event driven programming
。
使用常規套接字,您的進程會阻止每個IO操作,即從未準備好的套接字讀取將使您的進程進入休眠狀態,直到數據可用。在非阻塞/事件驅動的情況下,您可以輪詢套接字並在套接字準備好讀取或寫入時獲得回調,因此單個進程可以在多個套接字上覆用,因此可以提供良好的可擴展性,因爲您無需分叉流程來處理更多的客戶。
有在Perl很多很好的基於事件的框架,e.g POE和AnyEvent POE是有很多的模塊和功能的特定事件循環和AnyEvent是一個抽象層,允許您使用相同的代碼多個事件循環。
您還應該查看libev,它與POE類似,但開銷較小。
寫入事件驅動代碼起初有點棘手,因爲您需要小心使用的阻塞代碼,例如cpu密集型操作,或者使用非阻塞的庫。因爲因爲你只有一個進程,所以如果它忙於做某事,它就無法做其他任何事情 - 比如輪詢套接字併發出回調。因此,如果你需要非阻塞和密集型計算,一種方法是創建工作者分叉並使用非阻塞管道在它們和事件循環之間進行通信,這對於上述庫非常簡單。
「寫事件驅動代碼起初有點棘手」 - 您忘記了「有限狀態機」的魔術字。 POE爲+1。 – Dummy00001 2010-07-13 12:50:20
我發現這篇不錯的文章,但它似乎有點過時。 http://www.kegel.com/c10k.html – NickD 2010-07-13 10:35:27