का उपयोग कर यहाँ मेरी स्थिति है:अतुल्यकालिक, स्वीकार किया, बिंदु से बिंदु कनेक्शन gSoap
- मैं है एक
wsdl
, एक हेडर फाइल करने के लिए इस तरह "अनुवाद":wsdl2h -o file.h file.wsdl
- फिर, मैं
soapcpp2 -Icorrect_path -j file.h
मार डाला
- पर "सर्वर साइड" मैं सेवा लागू किया,
soapXXXService.[h|cpp]
- का उपयोग कर पर "सर्वर साइड" फिर से, मैं
soap_init2
इस्तेमाल किया (SOAP_IO_KEEPALIVE
के साथ), मैंsoap_bind
,है,soap_copy
, आदि और यह बिल्कुल ठीक काम करने के लिए लगता है (नीचे देखें) - पर "ग्राहक के पक्ष", मैं उत्पन्न
proxy
वस्तु (फिरSOAP_IO_KEEPALIVE
का प्रयोग करके) का उपयोग करें, संदेश का निर्माण और सर्वर पर भेज - "सर्वर" इस संदेश को प्राप्त करता है और वापस एसीके (कस्टम
XML
) - "ग्राहक"
ACK
प्राप्त करता है और सब कुछ बिल्कुल ठीक है भेजता है।
तो, क्या मैं अब क्या करना चाहते हैं "सर्वर" "ग्राहक" और "ग्राहक" के लिए "असली" प्रतिक्रिया वापस करना है "सर्वर" करने के लिए एक ACK
वापस लौटने के लिए है।
यह कैसे संभव है? (यह होना चाहिए)
"आपने क्या प्रयास किया है?"
दो चीजें मेरे दिमाग में आती हैं।
किसी भी तरह सॉकेट की फ़ाइल डिस्क्रिप्टर का पुन: उपयोग करना है, सर्वर पर वापस "असली प्रतिक्रिया" भेजने के लिए, soap_accept
से वापस लौटाया गया है। लेकिन क्या यह भी संभव है?
यूनिक्स सॉकेट पूर्ण डुप्लेक्स हैं, इसलिए यह तकनीकी रूप से संभव है, लेकिन gSoap
इसे प्रतिबंधित करता है? क्योंकि मैंने दस्तावेज़ में इस बारे में कुछ भी नहीं देखा था।
दूसरा विकल्प, जो मेरे दिमाग में आता है, "क्लाइंट" में एक ही "सेवा" बनाना है, जिससे संदेश प्राप्त करना संभव हो ("वास्तविक प्रतिक्रिया") और ACK
को उसी तरह से वापस करने के लिए "सर्वर" में। लेकिन इसका मतलब यह होगा कि "सर्वर" में proxy
ऑब्जेक्ट का एक उदाहरण भी होना चाहिए ताकि यह "वास्तविक प्रतिक्रिया" भेजने में सक्षम हो सके।
और यह वास्तव में मेरे लिए बदसूरत और भयानक लगता है। ऐसा नहीं है कि यह आश्चर्यचकित होगा अगर यह एकमात्र विकल्प है, लेकिन ..
संपादित करें: दूसरे विकल्प के लिए - इसका मतलब यह होगा कि क्लाइंट में श्रोता बंदरगाह होना चाहिए, इनकमिंग कनेक्शन को संभालना चाहिए आदि। मेरे लिए एक ग्राहक की तरह ध्वनि ..
मैं समझता हूँ, कि मैं कैसे gSoap
कार्यों में से कुछ मूलभूत हिस्सा (रों) गायब हो सकता है, लेकिन मैं पूरी user documentation और "getting started" guide पढ़ सकते हैं और मैं कुछ भी नहीं मिला इसके बारे में।
कृपया, मुझे पता है अगर कुछ स्पष्ट नहीं है जाने
संपादित करें:
- क्लाइंट सर्वर को अनुरोध भेजता है: परिदृश्य, मैं हासिल करना चाहते है
- सर्वर एसीके प्रतिक्रिया के रूप में देता है ई (मानक एसीके) की तरह - संकेत प्रतिक्रिया
और यह परिदृश्य विपरीत दिशा में भी हो सकता है: सर्वर क्लाइंट को भी अनुरोध भेज सकता है। इसका मतलब होगा - ऊपर जैसा ही परिदृश्य है, लेकिन "क्लाइंट" < -> "सर्वर" को बदल रहा है।
नोट: दोनों request/response
और ACK
SOAP संदेश जा सकता है।
मुझे लगता है कि अब मैं समझता हूं। मैं अपना प्रारंभिक उत्तर खींच रहा हूं। –
अंक 1, 2 और 3 के बारे में प्रश्न। क्या आपको अपने ग्राहक को अपना अनुरोध भेजने की आवश्यकता है, त्वरित "एएसी" प्राप्त करें, फिर बाहर जाने और अन्य चीजों को करने में सक्षम होने के लिए, और बाद में यह देखने के लिए जांचें कि क्या यह प्राप्त हुआ है या नहीं अंतिम प्रतिक्रिया? यदि ऐसा है, तो आप इसके बजाय अपने क्लाइंट को बहुप्रचारित कर सकते हैं और पहले "एएके" को खत्म कर सकते हैं। क्या यह अनुरोध भेजता है, और एक कार्यकर्ता धागे पर अंतिम प्रतिक्रिया की प्रतीक्षा करें, जबकि ग्राहक का मुख्य धागा उपयोगी काम करने के लिए चला जाता है। –
बिंदु 4 के बारे में प्रश्न 4. क्लाइंट से सर्वर पर बैक क्यों आवश्यक है? यदि इसकी आवश्यकता है, तो इसे जीएसओएपी दस्तावेज़ों की धारा 7.4 द्वारा नियंत्रित किया जा सकता है। –