2010-07-14 51 views
2

我有一個Perl服務器,當它啓動時,它連接到1000多個客戶端。使用SSL設置所有連接大約需要30-45分鐘。我試圖把開始時間縮短到更合理的地步。我嘗試使用線程來卸載工作,但無法使其工作。在一個線程中創建套接字並將其返回給調用者並不像預期的那樣工作。嘗試傳遞文件描述符並用IO :: Socket :: SSL-> new_from_fd()重新創建回調函數但返回失敗。Perl快速創建套接字的方法(1000+)

有沒有人有任何建議,如何快速創建這麼多插座?或至少快於O(n)...

更新:看起來像POE框架絕對是我想探索的東西。文檔聽起來像它可以做我需要的東西。我現在正在構建一個概念證明,並且特別在訪問Sessions中創建的Socket對象時遇到了麻煩。我可以在POE會話中創建套接字,但是在完成之後,我希望我的主程序將創建的套接字收集到一個散列中。任何人都知道如何從POE會話中檢索對象?

更新:有一個想法,包括使用全局變量並將會話套接字添加到會話中,或者保持創建會話的引用並訪問它們的堆來聚合它們。立即試用...

+2

你真的需要創建多個套接字嗎?由於SSL身份驗證不是即時的,因此會有開銷。 – Ether 2010-07-14 19:16:54

+1

是的,我知道SSL需要握手和所有設置開銷,但我認爲這是我唯一的選擇。除非你知道一種方法來聽取可讀的套接字,而沒有實際上保持那麼多的套接字打開...... 我需要能夠監聽套接字上的數據,並且現在有1,000,000個用戶 – casey 2010-07-14 19:48:37

+3

好吧..想想Web服務器如何工作。僅僅因爲Apache可以同時處理200個(說)請求,並不意味着它有200個隨時打開的套接字。連接僅在需要時打開。 – Ether 2010-07-14 20:18:07

回答

3

看看這個TCP SSL Client代碼在POE。這個例子可以很容易地擴展到做你所要求的。如果你之前沒有在POE編碼,那就有一條學習曲線,但它非常好,documented

+0

謝謝我會看看,看看它是否做我需要的東西 – casey 2010-07-15 14:33:21

+0

POE絕對看起來像它可以做我想做的事。謝謝你的提示。我在創建測試/概念驗證之前,先將其用於我的真實代碼,並且對於學習曲線絕對正確。我知道如何在POE會話中創建套接字,但是我無法將IO :: Socket :: SSL對象返回到主程序中。文檔說可以訪問會話的數據存儲,但我無法弄清楚。 POE邏輯 - 啓動一系列會話,每個會話創建並存儲自己的一堆套接字。最後,把它們全部收集在主程序中。 – casey 2010-07-16 15:04:37

+0

您或任何擁有POE經驗的人都有任何提示訪問會話的數據存儲以收集我創建的Socket SSL對象嗎? – casey 2010-07-16 15:06:26