nginx

2012-01-31 16 views
29

के साथ संवाद करने के लिए सी ++ ऐप बनाने के लिए सबसे अच्छी विधि मुझे एक सी ++ इंटरफ़ेस लिखना है जो हमारी डेटा संरचना को पढ़ सकता है और http प्रोटोकॉल का उपयोग कर क्वेरी पर आधारित ओ/पी प्रदान करता है।nginx

सर्वर की आवश्यकता
यह एक ही समय में 100 ग्राहकों की सेवा के लिए सक्षम होना चाहिए।

क्यों सी ++
सभी कोड पहले ही सी ++ में लिखे गए हैं। तो हमें सी ++ में बस एक http परत लिखने की जरूरत है। यही कारण है कि मैं एक और पारंपरिक वेब प्रोग्रामिंग भाषा के बजाय सी ++ चुन रहा हूं।

मैं स्थिर फाइलों की सेवा के लिए nginx का उपयोग करने और सी ++ के साथ संवाद करने के लिए अपने प्रॉक्सी पास का उपयोग करने के बारे में सोच रहा हूं।

  • एक FastCGI C++ मॉड्यूल लिखें:

    दो दृष्टिकोण मैं पाया है रहे हैं।

  • एक node.js C++ मॉड्यूल लिखें।

  • कृपया किसी भी अन्य सुझाव यदि आप

आप पूर्व अनुभव के आधार पर पेशेवरों और प्रत्येक विधि के लिए विपक्ष की सूची कृपया है?

+0

आप प्रश्न शब्द बदलना चाहते हैं। कौन सा "सर्वश्रेष्ठ" है, शायद बहुत सारी राय शामिल करने जा रहा है। –

+0

आप कहते हैं "एक ही समय में 100 ग्राहक"। क्या आपको वास्तव में ओवरलैप करने के लिए 100 कनेक्शन की आवश्यकता है, या आप कुछ विशिष्ट थ्रूगपुट (जैसे प्रति सेकंड 100 "लेनदेन") की तलाश में हैं? यदि आपके पास लंबे कनेक्शन हैं (आमतौर पर छोटे HTTP चक्रों के विपरीत), यह उत्तर को बहुत प्रभावित कर सकता है। –

+0

ठीक है, मैं प्रश्न शीर्षक के बारे में सोच रहा हूं। अगर आप पाएंगे तो क्या आप इसे बदल देंगे? –

उत्तर

9

मुझे लगता है कि मैं आगे Nginx मॉड्यूल devlopment http://www.evanmiller.org/nginx-modules-guide.html

क्यों साथ जाना होगा?

  1. यह FastCGI और अन्य किसी भी अन्य पुस्तकालय निर्भरता की आवश्यकता नहीं है।
  2. मैं अपने मॉड्यूल के अंदर nginx की सभी सुविधाओं का उपयोग कर सकता हूं।
+0

आपने इस के साथ कैसे किया? – Homer6

+0

@ होमर 6 विकास के लिए मैंने nginx मॉड्यूल का एकमात्र कारण चुना था, मुझे किसी तीसरे lib की आवश्यकता नहीं है। –

+3

अच्छा लगता है। बस सोच रहा है कि क्या आपको इसके साथ सफलता मिली है। यदि ऐसा है, तो मैं आपके पथ का अनुसरण कर सकता हूं और मॉड्यूल को भी लिख सकता हूं। उनके मॉड्यूल एपीआई का आपका समग्र प्रभाव क्या था? – Homer6

9

आप जो पूछ रहे हैं वह मूल रूप से सी ++ प्रक्रिया को चालू करने के लिए है जो आपके डेटा स्ट्रक्चर को वेबसर्वर में रखता है। यह इसके बारे में जाने का सबसे अच्छा तरीका नहीं हो सकता है। (फिर फिर, शायद यह आपकी स्थिति में है। यह सी ++ प्रक्रिया के इंटरफेस की जटिलता पर निर्भर करता है जिसे आप अनुमान लगाने का प्रयास कर रहे हैं।)

वैसे भी, मैं सी ++ प्रक्रिया के बीच एक छोटा http फ्रंटएंड चिपकाने का प्रयास करूंगा और क्लाइंट जो http काम कर सकते हैं और ZeroMQ/zmq जैसे कुछ सरल संदेश प्रोटोकॉल का उपयोग कर सी ++ बैकएंड प्रक्रिया के साथ संवाद कर सकते हैं।

zmq सी/सी ++ में काफी सीधे आगे है, और यह बहुत ही कुशल और बहुत तेज़ है। Zmq का उपयोग करके आप पाइथन में एक साधारण वेबसर्वर फ्रंटेंड को बहुत तेज़ी से सेट कर सकते हैं, या जो भी भाषा आप पसंद करते हैं उसमें zmq bindings है, और उस फ्रंटएंड को zmq का उपयोग करके बैकएंड सी ++ प्रक्रिया के साथ असीमित रूप से या सिंक्रनाइज़ेशन किया गया है।

c++ examples और the guide यदि आप zmq का उपयोग कर रहे हैं तो अच्छे शुरुआती बिंदु हैं।

नोड.जेएस के लिए a few examples भी हैं।

+1

क्षमा करें टेलिफोन को भूल जाओ मैं गैर भुगतान लाइसेंस की तलाश में हूं। –

+2

ज़ीरोएमक्यू मुफ़्त है। –

4

कोशिश जी वान

आप सीधे अपने C++ अनुप्रयोग का उपयोग कर सकते हैं, और जी वैन तेज नरक के रूप में है, तेजी से nginx से।

+0

यदि आपके उत्तर पहले ही स्वीकृत उत्तरों में कुछ भी नहीं जोड़ते हैं तो आपको पुराने प्रश्नों का उत्तर नहीं देना चाहिए। – alestanis

+2

आईएमओ, अधिक विकल्प देखने के लिए हमेशा सहायक। –

+1

जी-वैन Nginx से तेज नहीं है। – Alice

17

कोई भी यहां वास्तविक प्रश्न को संबोधित नहीं करता है, हालांकि कुछ अच्छे कामों की पेशकश की गई है। मैं कुछ छोटे बदलावों के साथ nginx के लिए सी ++ मॉड्यूल बनाने में सक्षम हूं।

  1. मॉड्यूल स्रोत फ़ाइल नाम को .cpp के साथ समाप्त करने के लिए बदलें ताकि gcc को यह समझ सके कि यह C++ से निपट रहा है।
  2. सुनिश्चित करें कि आपके सभी nginx में शामिल हैं (उदा। Ngx_config.h, ngx_core.h, आदि) बाहरी "सी" {} संरचना के साथ लपेटे गए हैं। इसी प्रकार सुनिश्चित करें कि nginx फ़ंक्शन पॉइंटर्स के माध्यम से बुलाए गए किसी भी फ़ंक्शन को रैपर के साथ घोषित किया गया है।
  3. nginx सेट अप करते समय अपने "कॉन्फ़िगर" आमंत्रण में --with-ld-opt = "- lstdC++" जोड़ें।

उन तीन चरणों के साथ आपके मॉड्यूल को संकलित, निर्माण, लिंक और वास्तव में काम करना चाहिए।

+2

क्रिस्टोफर, क्या आपके पास इसके लिए एक सरल कंकाल है? बस जिज्ञासा – gubble

+1

धन्यवाद। यह स्वीकार्य उत्तर (आईएमओ) होना चाहिए। –

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