2010-11-25 4 views
11

मैं कुछ समय के लिए PHP का उपयोग कर रहा हूं। और मैं ऑनलाइन गेम या ऐप बनाने के लिए गैर अवरोधक विचार का उपयोग करने के लिए इसके साथ जाने के लिए node.js सीखने के बारे में सोच रहा हूं। दोनों एक साथ उपयोग करने पर काफी जानकारी है। किसी गेम के पीछे के हिस्से के हिस्से के रूप में नोड का उपयोग करना वास्तव में गेम के कुछ पहलुओं को गति दे सकता है, खासकर अगर गेम वास्तविक समय में उपयोगकर्ताओं को एक-दूसरे के खिलाफ खेलने की अनुमति देता है।क्या मुझे पायथन में node.js की आवश्यकता है जैसे मैं PHP के साथ होगा?

ठीक है, हाल ही में मैं भी पाइथन सीखने में देख रहा हूं (हाँ मेरे पास मेरे हाथों पर बहुत समय है)। PHP पर इसके बारे में कई विशेषताएं हैं जिन्हें मैं वास्तव में पसंद करता हूं। लेकिन पृष्ठभूमि कार्य करने के लिए node.js के उपयोग के लिए जैसे मैं php के साथ विचार कर रहा था, मुझे बहुत अधिक जानकारी नहीं मिल रही है। मैंने यह भी देखा है कि अजगर में कुछ थ्रेडिंग विशेषताएं हैं। चूंकि मैं अभी भी पाइथन दुनिया के लिए बहुत नया हूं, क्या मुझे अजगर में node.js की भी आवश्यकता होगी? पाइथन इन प्रकार की विशेषताओं को संभाल सकता है जो node.js कर सकते हैं? या फिर भी नोड का उपयोग करने के लिए लाभ होंगे, या मैं वास्तव में की आवश्यकता होगी।

एक साइड नोट के रूप में, चूंकि मैंने पाइथन को देखना शुरू कर दिया है, इसलिए मैंने मोड़ की खोज भी की जो कि नोड की तरह एक और ढांचा है। लेकिन मोड़ पाइथन में लिखा है। तो उपर्युक्त मामलों में से किसी एक में बेहतर हो जाएगा (तथ्य यह है कि मोड़ लंबा हो गया है और नोड से अधिक स्थिर है)। मेरा मतलब यह है कि सामान्य रूप से इसका उपयोग करने के लायक है, न तो नोड या मुड़। और यदि ऐसा है तो पाइथन के साथ दूसरे की तुलना में बेहतर है।

बड़े प्रश्न के लिए खेद है, लेकिन मैं इस क्षेत्र में बस इतना अनिश्चित और n00b हूँ। धन्यवाद।


तो के रूप में यह खड़ा है, सहायक उत्तरों को पढ़ने के बाद, मैं निम्नलिखित विकल्पों देखें: 1. पीएचपी + जे एस 2. अजगर + मुड़ 3. अजगर + पजामा 4. अजगर + Node.js 5. Node.js 6. मुड़

  1. मैं पहले से ही पीएचपी जानते हैं और यह के साथ आराम कर रहा हूँ, और वर्तमान में हूँ learnign जे एस। यह मेरे लिए एक बड़ा संभव मार्ग था। लेकिन मैं PHP से पायथन तक भी झुका रहा था क्योंकि मुझे पसंद की भाषा की सामान्य विशेषताओं में।

  2. यह विकल्प मैंने सोचा था कि नेटवर्किंग पोर्ट को संभालने के लिए टकराकर # 3 से अधिक व्यावहारिक हो सकता है ताकि खिलाड़ी एक दूसरे के साथ लाइव खेल सके।

  3. यह सिर्फ इसे बनाता है ताकि आपको जेएस सीखना न पड़े। मेरे लिए जो कुछ भी एक सौदा की तरह प्रतीत नहीं होता है। मैंने पहले ही इसे पढ़ना शुरू कर दिया है और यह सीखना मुश्किल नहीं है। लेकिन जैसा कि एक प्रश्न में उल्लेख किया गया था, चीजों को मिलाकर; और {} संभावित रूप से कुछ मुद्दों हो सकता है।

  4. # 2 की तरह, लेकिन node.js. के साथ। अधिकांशतः मैं नेटवर्किंग पहलू को संभालने के लिए नोड के अतिरिक्त को देखने के लिए खिलाड़ियों को लाइव/रीयल-टाइम गेम में खेलने में सक्षम होने देता हूं। और कोड का बहुमत अजगर में होगा।

  5. एकल नोड, जेएस एक विचार था और साथ ही यह एकल भाषा मार्ग भी था। लेकिन इसमें पाइथन सीखने और उपयोग करने के समान लाभ नहीं हैं (यह एक सामान्य स्क्रिप्टिंग भाषा है जिसका मैं उपयोग कर सकता हूं, और वेब डिज़ाइन से बाहर हूं। एक बड़ा कारण मैं सीखना चाहता था और इसका उपयोग करना चाहता था।)।

  6. उत्तर # 5 के रूप में उत्तर दें लेकिन मैं टिप्पणियों को पढ़ने तक एकमात्र घुमावदार मार्ग पर विचार नहीं कर रहा था। जबकि यह प्रतीत होता है, यह वास्तव में उन दो भाषाओं में से एक को शामिल नहीं करता है जिन्हें मैं सीखना चाहता हूं। पायथन और नोड।

उपरोक्त मुख्य मार्ग हैं जो मैं जा सकता हूं। अब भी मुझे यकीन नहीं है कि कौन सा मार्ग जाना है। मैं वास्तव में नोड और पायथन दोनों सीखना चाहता हूँ। तो ऐसा लगता है कि मुझे सिर्फ दो अलग-अलग सीखने की आवश्यकता हो सकती है। लेकिन मुझे अभी भी इस परियोजना के लिए एक विकल्प चुनने की जरूरत है। और अब तक मुझे संख्या 2 और 5 पसंद है। 6 के करीब 6 नोड के बाद से और मुड़कर कुछ बहुत ही समान कार्यक्षमता है। और 1 उल्लेख के रूप में है क्योंकि जो मुझे पहले से ही पता है। लेकिन मैं वैसे भी कुछ नया सीखना चाहता था। तो फिर भी, वास्तव में संख्या 2 और 5. या 4 इसके समान हैं 2. हां, मुझे अभी भी कुछ होमवर्क करने की आवश्यकता है। शायद यह एक और सवाल का हकदार है।

संपादित करें (9-19-2012): मैं बस यह कहना चाहता हूं कि मैं वर्तमान में विकास के लिए node.js का उपयोग कर रहा हूं। और वास्तविक समय पृष्ठ अपडेट की उपस्थिति देने के लिए पबसब कार्यक्षमता के लिए रेडिस का उपयोग करने की योजना है, क्योंकि मुझे गेम में वास्तविक युग्म की आवश्यकता नहीं है, या जोड़े गए सामग्री संपादन में।

+1

आपका पॉइंट 6 गलत है: ट्विस्ट * है * पायथन। ट्विस्टेड का पूरा बिंदु सादा पायथन एपीआई के रूप में ज्यादा घटना-संचालित नेटवर्किंग सामान को उजागर कर रहा है। – Glyph

+0

ओह ठीक है। समझा। मुझे पता था कि यह पाइथन लिखा गया था, लेकिन मुझे लगता है कि इसका मेरा विचार थोड़ा सा था। – skift

+0

यह ध्यान देने योग्य है कि पायथन एक भाषा है, ट्विस्ट वेब पर पायथन को बढ़ाता है और नोड.जेएस वेब पर जावास्क्रिप्ट बढ़ाता है।जैसे आप PHP के साथ रेल पर रूबी का उपयोग नहीं कर सकते (जब तक कि आप दो घटकों को गठबंधन करने के लिए बहुत सी सिलाई कार्य नहीं करना चाहते हैं), आप नोड.जेएस के साथ ट्विस्ट का उपयोग नहीं कर सकते हैं, और आप ' पायथन के साथ नोड.जेएस का उपयोग नहीं करते हैं। – TheEnvironmentalist

उत्तर

9

अजगर निश्चित रूप से अतुल्यकालिक प्रोग्रामिंग के लिए इस्तेमाल किया जा सकता है, यह प्राकृतिक लग रहा है नहीं है, यहां तक ​​कि मुड़ के साथ, अगर आप Node.js लिए यह सिर्फ देखने या महसूस कि अच्छा नहीं है कि यह तुलना करें।

चूंकि आप रीयल-टाइम वेब गेम करने की योजना बना रहे हैं, तो आप अधिकतर WebSockets का उपयोग कर समाप्त हो जाएंगे।

WebSockets HTTP पर आधारित है और उन्नयन के शीर्ष लेख का उपयोग द्वि-दिशात्मक कनेक्शन का मतलब है कि आरंभ करने के लिए, आप आसानी से हो सकता है कर रहे हैं दोनों अपने सामान्य सर्वर और अपने WebRTC, पोर्ट 80 पर बना रहेगा यदि आप का एक बहुत जरूरत है पुराने ब्राउज़र का समर्थन करने के लिए पीछे हटें, फिर हमेशा सर्वशक्तिमान Socket.IO है।

इस पर निर्भर करता है कि आपका फ्रंट एंड कितना जटिल होगा, मैं express.js के साथ जाऊंगा या बस अपनी खुद की चीज़ें लिखूंगा।

एक ही प्रक्रिया में फ्रंट एंड एंड गेम दोनों होने के बाद (स्पष्ट रूप से) बहुत सारे फायदे हैं, आप डेटाबेस से पूछताछ की आवश्यकता के बिना बहुत सारी जानकारी प्राप्त कर सकते हैं।

एक और बड़ी "सुविधा" यह है कि आपको क्लाइंट तर्क और सर्वर के तर्क के बीच संदर्भ स्विच करने की आवश्यकता नहीं है। यह पहली बार एक छोटे से लाभ की तरह प्रतीत हो सकता है, लेकिन इस तथ्य के अलावा कि आप पाइथन में ; टाइप नहीं करेंगे और कुछ घंटों तक लगातार काम करने के बाद जेएस में अपने {} को न भूलें, आप भी सक्षम होंगे सर्वर और क्लाइंट के बीच कोड का पुनः उपयोग करने के लिए।फिर से यह पहले एक छोटे से लाभ की तरह लग सकता है, लेकिन अच्छे मल्टी प्लेयर गेम हमेशा क्लाइंट पर बहुत सी चीजें चलाते हैं, बस अंतराल की क्षतिपूर्ति करने के लिए, पायथन और जावास्क्रिप्ट भी काफी भिन्न होते हैं ताकि जेएस के भाग फिर से लिख सकें पायथन में समय लगता है और यहां तक ​​कि बग भी पेश कर सकता है।

(अब पर बेशर्म प्लग करने के लिए ...)

मैं Node.js के साथ 2 बहु खिलाड़ी खेल किया है पहले से ही है, हालांकि कोई HTTP सामने दोनों खेल काफी जे एस का एक बहुत चलाने के सिरे क्लाइंट पर:
Multiplayer Asteroids/Geometry Wars Crossover
RTS Concept (a bit like Eufloria)

इसके अलावा, JSON ब्राउज़र और ग्राहक के बीच डेटा भेजने के लिए पूरी तरह से फिट करने लगता है, जबकि, आप जल्द ही पता लगाना होगा कि यह एक टन बैंडविड्थ की का उपयोग करता है, के बाद से मैं का सामना करना पड़ा एस
BiSON.js

फिर, जावास्क्रिप्ट दोनों होने सर्वर और ग्राहक एक फिर से उपयोग कोड की सुविधा देता है और इसलिए विकास समय की बचत पर: ame समस्या मैं कुछ विशेष पुस्तकालय जो 45% यातायात के लिए ऊपर की बचत होती है लिखा है।

तो यह सब योग करने के लिए ऊपर मैं दृढ़ता से सुझाव है कि होता Node.js साथ जाने के लिए:

  1. फिर से प्रयोग करने योग्य कोड, कम संदर्भ इसलिए कम विकास समय
  2. वी 8 स्विचिंग तेजी अजगर से है कई मामलों।
  3. कोई समवर्ती समस्या नहीं है, सब कुछ डिफ़ॉल्ट रूप से async है।
  4. नोड.जेएस अगली बड़ी बात है, अब बैंडवागोन पर कूदें।
  5. यह जावास्क्रिप्ट है! ;)
+0

हाँ दोनों सिरों पर एक ही भाषा आकर्षक है। लेकिन दो का उपयोग करने से मुझे वास्तव में उन सभी को महसूस नहीं होता है, जो PHP के साथ जेएस का उपयोग करने के समान ही हैं। बहुत समय पहले मैंने दो नोड.जेएस ढांचे, एक्सप्रेस और जेडी में देखा था। लेकिन मैंने या तो बहुत सारे होमवर्क नहीं किए हैं। और यदि मैं नोड का उपयोग करता हूं, तो मैं एक ढांचे का उपयोग करना चाहता हूं क्योंकि मुझे पता है कि वे कितने फायदेमंद हो सकते हैं। – skift

+0

इसके अलावा, बायसन के संबंध में, यह मुझे mongodb की याद दिलाता है, जो एक बाइनरी JSON का उपयोग करता है। जो मैं विकास के लिए उपयोग करना चाहता हूं। तो मुझे यकीन नहीं है कि यह बायसन के साथ मिश्रण में कैसे फिट होगा। पहले उल्लेख किया गया है, मेरे पास अभी भी कुछ होमवर्क है। – skift

+0

@luckysmack वहाँ कुछ अलग "द्विआधारी" जेएसओएन बाहर निकलते हैं, मुझे नहीं पता कि मोंगो क्या उपयोग करता है, लेकिन मुझे लगता है कि वे उस व्यक्ति का उपयोग करते हैं जो आकार में छोटे होने पर केंद्रित नहीं है, बल्कि पढ़ने के लिए तेज़ है। सामान्य जेएसओएन पढ़ने की गति के संबंध में सबसे अच्छी बात नहीं है, इसलिए बाइनरी एक करना और अतिरिक्त जानकारी में पैकिंग में भारी गति वृद्धि होगी। –

2

मुझे नहीं लगता कि यह इतना बेहतर है क्योंकि यह पाइथन-ऑन-पायथन है, लेकिन क्योंकि आप खेल के भाग और दोनों को ट्विस्ट में वेब पार्ट कर सकते हैं।

संपादित करें:

इसके अलावा, Pyjamas

+0

हाँ, node.js का एक ही ड्रॉ है, यह है कि मैं सर्वर और क्लाइंट पक्ष को अलग करने के बजाय पूरी चीज़ को एक प्राथमिक भाषा में कोड कर सकता हूं। मैं अपनी कुछ अन्य विशेषताओं के लिए अजगर सीखना चाहता हूं कि PHP में नहीं है। एक सामान्य पटकथा भाषा के रूप में यह काफी बेहतर है, यही कारण है कि यह उन संभावित मार्गों में से एक है जिन्हें मैं लेना चाहता था। – skift

0

यह मुझे लगता है जैसे आप पृष्ठभूमि में किसी प्रकार की प्रसंस्करण करने के लिए एक सिस्टम होने के बारे में बात कर रहे हैं जिसे आप असीमित रूप से करना चाहते हैं। यदि ऐसा है तो आप किसी प्रकार की क्यूइंग प्रणाली का उपयोग करने पर विचार कर सकते हैं। इस तरह आप कतार में एक संदेश डाल सकते हैं जब तक यह कार्यकर्ता प्रक्रियाओं के एक पूल द्वारा संसाधित नहीं हो जाता है।

Celery यह बहुत आसान बनाता है, लेकिन अगर आपने पहले ऐसा नहीं किया है तो खरगोश एमक्यू (या कोई अन्य संदेश ब्रोकर) सही तरीके से कॉन्फ़िगर किया जा सकता है।

1

नोड.जेएस का उपयोग करने का पूरा बिंदु इसकी ताकत है जो http://nodejs.org/#about पर अच्छी तरह से प्रलेखित है। जबकि आप निश्चित रूप से एक सर्वर-साइड भाषा और अपनी जरूरतों के लिए एक फ्रंटेंड स्टैक का उपयोग कर सकते हैं, मुझे लगता है कि 1 भाषा में सभी कोड लिखना एक बड़ी उत्पादकता वृद्धि होगी।

यदि मैं आप थे, तो मैं जितना संभव हो सके 1 भाषा में अपना अधिकांश कोड लिखने का प्रयास करूंगा। तो मुझे नहीं लगता कि आपको पाइथन (ट्विस्ट या टोरनाडो) के साथ नोड.जेएस का उपयोग करने की कोशिश करनी चाहिए। ऐसा लगता है कि कुछ प्रकार का ओवरलैप है।

बस जावास्क्रिप्ट में अपने सभी कोड लिखने की ठंडाता की कल्पना करें। ;)

+0

जावास्क्रिप्ट एक शांत भाषा कब बन गया? निजी तौर पर, मुझे इससे नफरत है, खासकर 'सब कुछ एक स्ट्रिंग/फ्लोट' टाइपिंग है। और विरासत तंत्र। और हर ब्राउज़र में थोड़ा अलग हैंडलिंग। फ्रेमवर्क बहुत मदद करते हैं, लेकिन फिर भी भाषा सड़ा हुआ है :) यदि केवल संभव है तो मैं पाइथन दोनों सर्वर और क्लाइंट पक्ष लिखूंगा। – wump

2

यदि आपको कॉलबैक उन्मुख प्रोग्रामिंग पसंद है, तो मुड़ और नोडज आपके लिए चीज हैं। अन्यथा, आप gevent पर एक नज़र डाल सकते हैं। यह मोड़/नोडजेज़ के समान है कि यह एक असीमित ढांचा है, लेकिन यह आपको थ्रेड किए गए दृष्टिकोण में कोड लिखने की अनुमति देता है।

यह दृश्यों के पीछे कोरआउट-आधारित जादू कर इसे प्राप्त करता है।

+0

गीवेंट और ट्विस्ट इस तरह तुलनीय नहीं हैं। इवेंट-संचालित प्रोग्राम लिखने के लिए लाइब्रेरी के अतिरिक्त, ट्विस्ट एक बेहद विशिष्ट नेटवर्क प्रोग्रामिंग लाइब्रेरी है। गीवेन्ट में कुछ नेटवर्क प्रोग्रामिंग फीचर्स हैं और इवेंट-संचालित प्रोग्रामिंग सिस्टम का केवल एक नंगे स्टब है। यह मूल रूप से ** ** ** सह-रूटीन के आसपास एक रैपर है (और यदि आपको सह-दिनचर्या पसंद है, तो आप समान चीजें पा सकते हैं जो वास्तव में अच्छी तरह से घुमाए गए हैं)। –