2010-10-31 69 views
1

問題是,我想開發一個應用程序(可能是PHP?),能夠快速連接到SSL安全的服務器並從中發送/獲取數據。我的目標是儘可能快地發送查詢並閱讀結果。我正在嘗試各種解決方案並對其進行基準測試。我試過fsockopen()和CURL,但是,想知道是否有任何解決方案可以改進它們?PHP應用程序 - 快速連接到HTTPS服務器

結果如下: 的fsockopen():

  • 接頭髮送:0.26755499839783;
  • 收到的頁面:0.48934602737427;

CURL結果:

  • [TOTAL_TIME] => 0.484
  • [pretransfer_time] => 0.281
  • [starttransfer_time] => 0.437

的問題是: 1 )當查詢開始在我連接的服務器上執行時 - 在發送標題之後或在獲取頁面和連接關閉之後? 2)哪個是我應該比較fsockopen()結果的CURL的執行時間?甚至在標題發送到服務器之前,starttransfer_time是什麼?這意味着fsockopen()會更快,不是嗎? 3)任何解決方案如何調整代碼執行的服務器上的SSL連接?對PHP的OpenSSL模塊進行任何調整(加密的任何可能的降級?)以使其更快? 4)沒有SSL到SSL安全服務器的解決方案? 5)在這種情況下,C++或其他解決方案會更快嗎?

任何想法,歡迎:)我被這個「MS」比賽:)

感謝, 喬納斯

+0

我需要找到解決方案,如何使握手部分更快。看起來我無法再改進連接部分了) – flyeris 2010-10-31 21:53:17

回答

1

沉迷沒有封閉形式解決你的問題。

關於C++,確實是解釋了PHP,C++是編譯+優化的,但PHP中的所有加密庫都是純C語言,因此編譯+優化。

根據服務器硬件,製作一個較短的服務器密鑰可以稍微固定握手階段。另外,最重要的是,所有依賴於TCP的網絡協議在處理事務時都會受到網絡延遲的影響,這些事務與數據傳輸(如FTP)的行爲不同,因爲它們是同步的。

反正...

1.You必須關閉連接手動

4.Unless你想要寫自己的完整的SSL協議,更好地利用可用的最高效的圖書館,OpenSSL的

5.是和否,至少你可能會得到性能提升,但可能並不顯着。在一般情況下,我會推薦它

+0

1.看起來代碼在您開始獲取數據之前發送頭文件並執行後開始執行。相當邏輯。輸出頁面必須事先顯示:) – flyeris 2010-10-31 21:51:04

+0

P.S.任何想法如何使握手更短的服務器密鑰? – flyeris 2010-10-31 21:51:52

+0

即使你使它成爲512字節,最小的握手也需要一些時間。秒的分數,但仍然是時間... – 2010-10-31 22:31:58

0

一個評論對你的方法,一般來說,和你的問題#2的響應:

當你創建基準(即比較的相對錶現兩個或多個不同技術選項),您不應該依賴技術本身報告的時間信息。主要原因在於它很難(除非你通過第三方代碼進行挖掘)才能確切地知道報告的是什麼,當然,沒有辦法對兩個不能保證表示的值進行準確比較相同的測量。

相反,你應該做到以下幾點:代碼

  • 寫兩件在功能上是相同的 - 換句話說,他們做同樣的事情,同樣的算法,在相同的數據進行操作等等...... - 唯一的區別是一個使用一種技術(例如fsockopen),而另一個使用其他技術(例如CURL)。

  • 現在,將兩段代碼都包裝在相同的循環中,這些代碼會多次重複調用代碼(例如1000次)。您希望您的總執行時間在每批次試驗中都在10秒或更長的範圍內。

  • 最後,在兩個相同的時間碼位中包裝每個循環(一個嘗試CURL,另一個嘗試fsockopen)。只需在開始循環之前捕獲時間(以毫秒爲單位),然後運行循環的所有循環,然後再捕獲時間並減去。

  • 這會給你一個更有代表性的兩種技術實際執行效果的圖片。如果需要,您可以根據循環中的迭代次數劃分最終時間,但只要兩次測試的迭代次數相同,就不需要這樣做。

旁註:你可能已經知道這一點,但在PHP編寫的基準代碼時,你應該使用microtime中的功能與可選的參數,如下所示:

<?php 
    $start = microtime(true); 
    /* run benchmark code */ 
    $elapsed = microtime(true) - $start; 
    echo("elapsed time: {$elapsed} microseconds"); 

在microtime中的可選參數僅在php> 5.0中可用,所以如果你仍然使用php 4.x,那麼你必須將兩次存儲爲字符串,然後在事實之後進行一些解析,以便將它們編入數字中,以便可以和他們做數學。有關更多詳細信息,請參見php docs for microtime()

+0

這正是我在做的。我無法像fsockopen()那樣逐步比較cURL,但最終結果與fsockopen()似乎更快。 – flyeris 2010-10-31 21:52:48

相關問題