2016-05-13 14 views
9

मैं एक बहुप्रचारित PHP क्लाइंट लिख रहा हूं जो एक अपाचे रिवर्स प्रॉक्सी को https अनुरोध करता है और कुछ आंकड़ों को मापता है। मैं टीएलएस सत्र पुनरुद्धार के साथ प्रदर्शन में सुधार के बारे में एक स्नातक थीसिस लिख रहा हूं। अब मुझे अवधारणा का सबूत करने की ज़रूरत है जो इसे साबित/अस्वीकार करता है। फिलहाल मैं इस कोड है:PHP में टीएलएस सत्र पुनरुद्धार

  $this->synchronized(function($this){ 
       $this->before = microtime(true); 
      }, $this); 

      $url = 'https://192.168.0.171/'; 
      # Some dummy data 
      $data = array('name' => 'Nicolas', 'bank account' => '123462343'); 

      // use key 'http' even if you send the request to https://... 
      $options = array(
       'http' => array(
        'header' => "Content-type: application/x-www-form-urlencoded\r\n", 
        'method' => 'POST', 
        'content' => http_build_query($data) 
       ), 
       "ssl" => array(
        "verify_peer" => false, 
        "verify_peer_name" => false, 
        "ciphers" => "HIGH:!SSLv2:!SSLv3" 
       ) 
      ); 

      $context = stream_context_create($options); 
      $result = file_get_contents($url, false, $context); 
      $this->synchronized(function($this){ 
       $this->after = microtime(true); 
      }, $this); 

      $this->counter_group->write($this->before, $this->after, $result); 

इस कोड को एक पूर्ण हाथ मिलाना करने के लिए काम करता है, लेकिन मैं कैसे php में एक फिर से शुरू करने के लिए हाथ मिलाना यह पता लगाने नहीं कर पा रहे?

किसी भी मदद की सराहना की जाएगी!

+1

... या अस्वीकार करता है। :) – bishop

+0

file_get_contents() अनुरोध के तुरंत बाद टीसीपी कनेक्शन बंद कर देता है ... आमतौर पर। एक हैंडल के साथ जीवित कनेक्शन हेडर और फॉपेन() की आवश्यकता है ... मुझे दुख की बात है कि अभी जांच करने के लिए पर्याप्त समय नहीं है: -/ – bwoebi

उत्तर

5

आप पीएचपी कर्ल कोशिश करते हैं और http://php.net/manual/en/function.curl-share-setopt.php

CURL_LOCK_DATA_SSL_SESSION शेयरों एसएसएल सत्र आईडी पीएचपी प्रलेखन से CURL_LOCK_DATA_SSL_SESSION

उपयोग करते हैं, समय जब एक ही सर्वर से पुनः कनेक्ट करने एसएसएल हाथ मिलाना पर खर्च को कम करने के कर सकते हैं। नोट कि SSL सत्र आईडी डिफ़ॉल्ट

द्वारा एक ही संभाल के भीतर पुन: उपयोग कर रहे हैं यदि आप उपरोक्त वर्णन से पढ़ सकते हैं के रूप में, एक ही सत्र id संभाल द्वारा पुन: उपयोग किया जाता है। लेकिन आप उदाहरण के लिए curl_share_init उपयोग करें यदि आप हैंडल के बीच साझा करना चाहते हैं कर सकते हैं

$sh = curl_share_init(); 
curl_share_setopt($sh, CURLSHOPT_SHARE, CURL_LOCK_DATA_SSL_SESSION); 
curl_share_setopt($sh, CURLSHOPT_SHARE, CURL_LOCK_DATA_DNS); 

तो आप विभिन्न अनुरोधों के बीच $sh का पुन: उपयोग कर सकते हैं

$ch1 = curl_init('https://192.168.0.171'); 
curl_setopt($ch1, CURLOPT_SHARE, $sh); 
curl_setopt($ch1, CURLOPT_SSLVERSION, 6); // TLSV1.2 
curl_setopt($ch1, CURLOPT_SSL_CIPHER_LIST, 'TLSv1'); 

curl_setopt($ch1, CURLOPT_POST, 1); 
curl_setopt($ch1, CURLOPT_POSTFIELDS, 
http_build_query(array('name' => 'Nicolas', 'bank account' => '123462343'))); 
curl_setopt($ch1, CURLOPT_RETURNTRANSFER, true); 

$output = curl_exec($ch1); 

और फिर पुन: उपयोग (हाथ मिलाना फिर से शुरू)

$ch2 = curl_init('https://192.168.0.171'); 
curl_setopt($ch2, CURLOPT_SHARE, $sh); 
curl_setopt($ch2, CURLOPT_SSLVERSION, 6); // TLSV1.2 
curl_setopt($ch2, CURLOPT_SSL_CIPHER_LIST, 'TLSv1'); 
curl_setopt($ch2, CURLOPT_RETURNTRANSFER, true); 
// (...) 
curl_exec($ch2); 

और करीबी कनेक्शन

curl_close($ch1); 
curl_close($ch2); 

लेकिन आपको CURLOPT_SSLVERSION और CURLOPT_SSL_CIPHER_LIST के साथ भी खेलने की आवश्यकता है। साथ ही, मुझे लगता है कि आपको एक अलग भाषा में स्विच करना चाहिए क्योंकि PHP की अपनी क्विर्क है, और यदि आप थीसिस साबित करते हैं या नापसंद करते हैं, तो नंगे धातु के करीब कुछ उपयोग करना बेहतर होता है, इसलिए आप सुनिश्चित हैं कि अतिरिक्त परत (PHP) आपके ब्रेक को नहीं तोड़ती बेंचमार्क। मैंने दोनों अनुरोधों के प्रदर्शन को माप लिया और यह थोड़ा सा अंतर्ज्ञानी है लेकिन दूसरा एक लगभग धीमा है।

+1

आपके समाधान के लिए धन्यवाद, यह लगभग बिल्कुल ठीक है कि मैंने इसे कैसे कार्यान्वित किया! और मुझे यह भी एहसास हुआ कि मेरे थीसिस के लिए PHP का उपयोग करना इष्टतम नहीं था, लेकिन भाषाओं को स्विच करने का कोई समय नहीं था। ऐसा कहा जा रहा है, मेरी थीसिस मेरे कॉलेज द्वारा प्रकाशित होने जा रही है। – Nicolas

संबंधित मुद्दे