2011-09-18 6 views
6

मैं PHP के लिए बहुत विशेषज्ञ नहीं हूँ। मैं जानना चाहता हूं कि 2 वेब सर्वरों के बीच संवाद कैसे करें। निकासी के लिए, (1 सर्वर से) दूरस्थ सर्वर पर फ़ंक्शन (क्वेरीिंग) चलाएं। और परिणाम को पहले सर्वर पर वापस कर दें।PHP: रिमोट फ़ंक्शन कॉल करें और परिणाम लौटाएं?

असल विषय हो जाएगा:
Web Server (1) ---------------->Web Server (2) --------------->Database Server
Web Server (1) < ---------------- Web Server (2) < --------------- Database Server

Query Function() केवल Web Server (2) पर स्थित होगा। तो मुझे Web Server (1) से query function() दूरस्थ रूप से चलाने की आवश्यकता है।

यह क्या कॉल है? और क्या यह संभव है?

+0

क्या आपने [इन प्रश्नों] पर एक नज़र डाली है (http://stackoverflow.com/search?q=php+rpc)? –

+0

आरपीसी? क्या यह मामला आरपीसी के बारे में है, तुम्हारा मतलब है? –

+1

आरपीसी * रिमोट प्रक्रिया कॉल * के लिए खड़ा है और ऐसा लगता है कि आप क्या करना चाहते हैं। यह एक सामान्य प्रोटोकॉल (या अवधारणा) है। बदलाव आरएमआई (जावा), एक्सएमएल-आरपीसी, जेएसओएन-आरपीसी हैं .... से चुनने के लिए बहुत कुछ है। आप अपना खुद का बना सकते हैं। लेकिन इसका मतलब यह नहीं है कि यह आपकी स्थिति में सबसे अच्छा तरीका है। [शायद आरईएसटी बेहतर होगा] (http://stackoverflow.com/questions/1098473/rest-vs-rpc)। –

उत्तर

11

हां।

एक अच्छा तरीका मैं कर सकता हूं कि एक यूआरएल के माध्यम से दूसरे सर्वर को अनुरोध भेजना होगा। जीईटी (या POST) पैरामीटर में, निर्दिष्ट करें कि आप किस विधि को कॉल करना चाहते हैं, और (सुरक्षा के लिए) कुछ प्रकार के हैश जो समय के साथ बदलते हैं। यह सुनिश्चित करने के लिए हैश कि कोई तीसरा पक्ष दूसरे सर्वर पर मनमाने ढंग से कार्य नहीं चला सकता है।

function get_url($request_url) { 
    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_URL, $request_url); 
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    $response = curl_exec($ch); 
    curl_close($ch); 

    return $response; 
} 

यह GET अनुरोध भेजता है:

अनुरोध भेजने के लिए, आपको cURL इस्तेमाल कर सकते हैं। इसके बाद आप उपयोग कर सकते हैं:

$request_url = 'http://second-server-address/listening_page.php?function=somefunction&securityhash=HASH'; 
$response = get_url($request_url); 

अपने दूसरे सर्वर पर, listening_page.php की स्थापना की है कि प्राप्त अनुरोधों के लिए जाँच करता है और अनुरोध की अखंडता की पुष्टि करता है (यानी हैश (जो फ़ाइल नाम आप निश्चित रूप से पसंद है, के साथ), सही & वैध पैरा)।

+0

वाह! क्या यह बस किया जा सकता है? तो मैं किसी भी फ़ंक्शन() को सीधे कॉल कर सकता हूं और वापसी कर सकता हूं, जैसा कि उसी स्थानीय फ़ंक्शन में .. .. –

+0

हां। आपको उन कार्यों को 'एक्सपोज़' करने की आवश्यकता होगी जिन्हें आप कॉल करना चाहते हैं। (यानी सर्वर 2 को GET अनुरोध प्राप्त होता है, फिर * यह * अनुरोधित फ़ंक्शन निष्पादित करता है, फिर प्रतिक्रिया 1 को वापस भेजता है, इसलिए सर्वर 1 * दूरस्थ * दूरस्थ फ़ंक्शन को कॉल नहीं कर रहा है लेकिन इसका एक समान प्रभाव है)। – Alex

+0

मैंने परीक्षण किया है और यह दोस्त काम करता है: डी इतना आसान। क्या यह इन का सही समाधान है? मेरा मतलब है, अन्य लोग आरईएसटी एपीआई, एसओएपी इत्यादि का उपयोग करने के लिए कह रहे हैं। कृपया क्यों करें .. –

0

आप एपीआई का उपयोग करके ऐसा कर सकते हैं। दूसरे सर्वर पर एक पृष्ठ बनाएं जो चर को लेता है और उन वर्र्स का उपयोग कर सर्वर पर संचार करता है (आपको जो चाहिए उसे निर्भर करता है)। और उस पृष्ठ से मानक उत्तर या तो JSON या XML होना चाहिए। फिर उस फ़ाइल का अनुरोध करके और दूसरे सर्वर से उत्तर प्राप्त करके सर्वर 1 से पढ़ें।

* नोट अगर इसकी एक निजी फ़ाइल, सुनिश्चित करें कि आप उन फ़ाइल तक पहुँचने से रोकने के लिए एक प्रमाणीकरण विधि का उपयोग

+0

तो आप एक आरईएसटी एपीआई के बारे में बात कर रहे हैं? –

+0

yup, लेकिन यह उपयोगकर्ता पर निर्भर करता है, आरईएसटी एपीआई अच्छा है, लेकिन अगर वह पसंद करता है तो वह जवाब के रूप में सादा पाठ का उपयोग कर सकता है। – ahoura

+0

अपनी बातचीत में बाधा डालने के लिए खेद है। लेकिन, जैसा कि मैं PHP के साथ नया हूं, क्या PHP सीधे JSON या XML परिणाम प्राप्त कर सकता है? मेरा मतलब है, जेएसओएन या AJAX परिणाम जावास्क्रिप्ट पर लौट रहे हैं और HTML तत्वों पर प्रिंट कर रहे हैं। (जहां तक ​​मुझे इसके बारे में बहुत कम पता है।) –

0

जो आप करना चाहते हैं वह निश्चित रूप से संभव है। आप मुझे सुझाव है कि आप सोप और REST API को पढ़ने

http://www.netmagazine.com/tutorials/make-your-own-soap-api

आम तौर पर आप का उपयोग करेगा सर्वर 2.

के लिए एक अनुरोध बनाने के लिए सर्वर एक के लिए क्रम में एपीआई के कुछ प्रकार सेट करना होगा सर्वर से सर्वर 2 से संपर्क करने के लिए कर्ल की तरह कुछ।

Google कर्ल और आपको तुरंत विचार प्राप्त करना चाहिए।

यह आपको एक पूर्ण समाधान देने में आसान नहीं होगा, इसलिए मुझे उम्मीद है कि सही दिशा में यह धुंध सहायक होगी।

+0

SOAP और REST API का उपयोग करने के बारे में आपके सुझाव के लिए धन्यवाद। लेकिन, एलेक्स का तरीका सरल है & काम कर रहे हैं। तो क्या आप कृपया बता सकते हैं कि उनके समाधान और एसओएपी/आरईएसटी एपीआई के बीच अलग कैसे है? धन्यवाद :) –

+0

ऊपर दिए गए अनुसार एचटीएमएल का उपयोग करके पूरी तरह से अच्छा समाधान है लेकिन एक एपीआई का निर्माण अंत में होगा बेहतर कार्यक्षमता, सुरक्षा इत्यादि। यदि आप केवल परिणामों के लिए पूछताछ कर रहे हैं तो यह एक त्वरित उपयोग करने के लिए त्वरित और सरल है। उदाहरण के लिए यदि आप उपयोगकर्ताओं को प्रमाणीकृत करना चाहते हैं, तो डेटा को डीबी आदि में डालने के लिए पोस्ट करें, तो सार्वजनिक रूप से खुली गेट शायद आदर्श नहीं है। – arkleyjoe

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