Node.js के लिए रास्पबेरी पाई को कॉन्फ़िगर करना


15

सिंगल पेज वेब एप्लिकेशन पर एक पुस्तक पढ़ना मैं एक पैराग्राफ में आया था जो मुझे सोच रहा था:

Node.js गैर-अवरुद्ध और घटना-चालित है। संक्षेप में, इसका मतलब है कि मामूली हार्डवेयर पर एक एकल Node.js उदाहरण दसियों या सैकड़ों समवर्ती खुले कनेक्शनों को संभाल सकता है , जैसे कि वास्तविक समय संदेश में उपयोग किया जाता है, जो अक्सर आधुनिक एसपीए की एक उच्च वांछित विशेषता है।

मैंने रास्पबेरी पाई को रेल सर्वर के रूप में उपयोग करने के मामले पर ध्यान दिया , तो Node.js के बारे में कैसे?

मैं अपने रास्पबेरी पाई को Node.js एप्लिकेशन को कैसे सेट करूँ?
क्या किसी ने कोशिश की, क्या सुझाव और तरकीबें हैं, शायद विचार-विमर्श या सीमा पर विचार किया जाए?


संपादित करें: गलतफहमी या ऑफ-टॉपिक्स से बचने के लिए, कृपया Node.s के संदर्भ में रास्पबेरी पाई पर ध्यान दें।

  1. रास्पबेरी पाई को नोड अनुप्रयोगों के लिए कितना अनुकूल है?
  2. यदि ऐसा है, तो सर्वोत्तम परिणामों के लिए रास्पबेरी पाई को कैसे ठीक किया जा सकता है?

क्योंकि पुस्तक सभी सिंगल पेज एप्लिकेशन के बारे में है, नोड.जेएस को वहां एक उपस्थिति बनाना था। हाँ, नोड के साथ सब कुछ परोसना संभव है। लेकिन मुझे संदेह है कि यह कभी भी किसी भी उत्पादन के माहौल में किया जाएगा क्योंकि यह बहुत जटिल और अमित्र हो सकता है
Piotr Kula

यह अजीब है कि आपने भ्रम से बचने के लिए 2 विशिष्ट प्रश्न पूछने के लिए उत्तर कैसे अपडेट किया और फिर नोड.जेएस स्थापित करने के लिए एक उत्तर को चिह्नित किया- जो सवाल नहीं था? आप मूल प्रश्न थे, इसे कैसे स्थापित किया जाए और कोई सलाह। मैंने भी क्यों परेशान किया? LOL :)
पायोटर कुला

1
लगता है जब पसंद किया गया था तब भी आप संपादन कर रहे थे; जवाब चुनने पर इसे उत्तरों की तरह ही संपादित किया जा सकता है, इसलिए इसे इंगित करने के लिए धन्यवाद। :)
मारीस ब्यूटुक २४'१३

जवाबों:


14

रास्पबेरी पाई पर Node.js प्राप्त करना

आप या तो यह कर सकते हैं:

  1. संकलित करें Node.js अपने आप से (जैसा कि पहले से ही इंगित किया गया है ) - रास्पबेरी पाई पर लगभग 2 घंटे।
  2. या आप बाइनरी v0.8.17 डाउनलोड कर सकते हैं

प्रदर्शन

मैंने एक त्वरित प्रदर्शन परीक्षण किया (एक मोटा पहला प्रभाव देने के लिए):

  1. मेरा रास्पबेरी पाई डिफ़ॉल्ट मैमोरी के साथ ओवरक्लॉक किया गया है (टर्बो) (64)

  2. मेरे स्थानीय नेटवर्क (802.11g वाईफ़ाई) पर टेस्ट किए गए।

  3. मैंने Node.js वेबसाइट से मानक "हैलो वर्ल्ड" उदाहरण का उपयोग किया:

    var http = require('http');
    http.createServer(function (req, res) {
      res.writeHead(200, {'Content-Type': 'text/plain'});
      res.end('Hello World\n');
    }).listen(1337, '127.0.0.1');
    console.log('Server running at http://127.0.0.1:1337/');
  4. अपाचे बेंच सेटिंग्स: ab -r -n 10000 -c 100 http://192.168.0.116:1337/

तो ये परीक्षण एक सामान्य वेब अनुप्रयोग (नेटवर्क कनेक्शन और स्थानांतरित सामग्री की लंबाई / जटिलता दोनों) के लिए प्रतिनिधि नहीं हैं

परिणाम

Server Software:        node.js/0.8.17
Server Hostname:        192.168.0.116
Server Port:            1337

Document Path:          /
Document Length:        12 bytes

Concurrency Level:      100
Time taken for tests:   53.824 seconds
Complete requests:      10000
Failed requests:        0
Write errors:           0
Total transferred:      1130791 bytes
HTML transferred:       120084 bytes
Requests per second:    185.79 [#/sec] (mean)
Time per request:       538.238 [ms] (mean)
Time per request:       5.382 [ms] (mean, across all concurrent requests)
Transfer rate:          20.52 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        2  178 405.2     40    4975
Processing:     7  342 1136.4     50   31533
Waiting:        6  274 1047.6     48   31533
Total:         11  520 1238.7     94   31581

Percentage of the requests served within a certain time (ms)
  50%     94
  66%    112
  75%    303
  80%    714
  90%   1491
  95%   2499
  98%   3722
  99%   5040
 100%  31581 (longest request)

एक तुलना के लिए, मैंने अपने रास्पबेरी पाई पर नगनेक्स भी स्थापित किया और डिफ़ॉल्ट के साथ एक ही परीक्षण चलाया "निग्नेक्स में आपका स्वागत है!" HTML फ़ाइल:

Server Software:        nginx/1.2.1
Server Hostname:        192.168.0.116
Server Port:            80

Document Path:          /
Document Length:        151 bytes

Concurrency Level:      100
Time taken for tests:   46.959 seconds
Complete requests:      10000
Failed requests:        0
Write errors:           0
Total transferred:      3610361 bytes
HTML transferred:       1510151 bytes
Requests per second:    212.95 [#/sec] (mean)
Time per request:       469.590 [ms] (mean)
Time per request:       4.696 [ms] (mean, across all concurrent requests)
Transfer rate:          75.08 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        2  162 407.8     40    4999
Processing:     5  256 979.8     45   29130
Waiting:        5  256 979.8     45   29130
Total:         32  418 1078.6     88   30477

Percentage of the requests served within a certain time (ms)
  50%     88
  66%     97
  75%    105
  80%    258
  90%   1064
  95%   2382
  98%   3412
  99%   4145
 100%  30477 (longest request)

रास्पबेरी पाई सेटिंग्स का अनुकूलन

raspi-configनिम्नलिखित सेटिंग्स को बदलने के लिए उपयोग करें :

  1. GPU के लिए मैमोरी_प्लिट को 16 पर सेट करें (न्यूनतम मान)
  2. सबसे तेज़ रैम / सीपीयू सेटिंग्स के लिए "टर्बो" को ओवरक्लॉकिंग मोड सेट करें

9

वेब सर्वर

Node.JS पाई पर वेब सर्वर प्रतिस्थापन के रूप में इस्तेमाल किया जा सकता है और आप आसानी से अकेले या सिंगल पेज वेब एप्लिकेशन बना सकते हैं।

लेकिन सिर्फ आपकी जानकारी के लिए, अधिकांश वास्तविक विश्व अनुप्रयोगों में आधुनिक nginx, हल्के वजन lighttpdया चंकी जैसे सर्वरों का उपयोग करने की सिफारिश की जाती है , लेकिन पूरी तरह से चित्रित किया गया है apache2! और फिर साइट को पूरक करने के लिए script.js।

जाहिर है कि संभावनाएं अनंत हैं और सब कुछ इस बात पर निर्भर करता है कि आप क्या हासिल करना चाहते हैं।

रास्पबेरी पाई?

रास्पबेरी पाई उन वेब सर्वरों में से कोई भी चला सकती है। यह बिना किसी गंभीर जटिलताओं के भी नोड चला सकता है और किसी भी जटिल ट्वीकिंग के बिना वास्तव में तेज है।

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

लेकिन क्या आपको वास्तव में नोड.जेएस का उपयोग करने की आवश्यकता है?

Node.JSजब आप शुरू (या प्रत्याशित) सैकड़ों और हजारों अनुरोध प्राप्त करने के लिए उपयोग किए जाने का इरादा रखते थे, तो न्यूनतम सर्वर ओवरहेड के साथ डीबी, कैश्ड या वापस पढ़ने के लिए डेटा के छोटे हिस्से की आवश्यकता होती है। तो आप क्लाइंट पर JS का उपयोग करके इसे चलाते हैं लेकिन Node.JSवास्तव में C / C ++ द्वारा संचालित होता है। तो क्या होगा यदि आपको कस्टम मॉड्यूल या आधार कोड में एक विशिष्ट बदलाव की आवश्यकता है?

वेबपेजेस नोड्स की सेवा देने वाले एप्लिकेशन में। आमतौर पर एकल अनुरोध पर उदाहरण के लिए एपर्चर को बेहतर नहीं बनाया जाता है। यदि आप दिन के अधिकांश के लिए प्रति सेकंड हजारों अनुरोध हैं, तो नोड.जेएस की गैर-अवरोधक सुविधा महान है, यह वह जगह है जहां अपाचे ब्लॉक और क्रैश होगा।

एक वास्तविक दुनिया उदाहरण

Ebay - एक नीलामी के दौरान जब आपके पास पिछले 30 सेकंड की गणना होती है। आपके पास कई लोग हो सकते हैं जो पृष्ठ को सख्ती से ताज़ा करते थे और बोलियाँ बढ़ाते थे। यह वह जगह है जहाँ नोड.जेएस चमकता है, क्योंकि आज आपको किसी भी अधिक ताज़ा करने की आवश्यकता नहीं है। ऐसा इसलिए है क्योंकि JS सभी ग्राहकों से बहुत बार (300ms ~ 600ms) नोड ajaxes करता है और एक "वास्तविक जीवन नीलामी" अनुभव प्रदान करने में सक्षम होता है। Ebay केवल नोड.जेएस से ही नहीं बल्कि बहुत जटिल लोड संतुलित सर्वर फ़ार्म पर चलती है।

Pi पर Node.js बनाने और स्थापित करने के लिए:

जाहिर है कि दूसरों के बजाय नोड.जेएस का उपयोग करने में कुछ भी गलत नहीं है और अगर पीआई जैसे साफ-सुथरे छोटे उपकरण पर नहीं तो नोड सीखना कितना अच्छा है। तो आप कोड को खुद इस तरह से संकलित कर सकते हैं।

$ sudo apt-get install git-core build-essential libssl-dev 
$ mkdir ~/nodeDL && cd ~/nodeDL 
$ git clone https://github.com/joyent/node.git
$ git checkout v0.6.15 (to checkout the most recent stable version at time of writing)

अद्यतन: नोड के बाद के संस्करण (वर्तमान संस्करण v0.8.18 है) नीचे दिए गए विशेष चरणों के बिना बनाया जा सकता है

अगले हम armv6संकलन के लिए वास्तुकला का उपयोग करने के लिए संकलक को बताने की जरूरत है :

$ export CCFLAGS='-march=armv6'
$ export CXXFLAGS='-march=armv6'
and then edit deps/v8/SConstruct around the line 82 mark, to add “-march=armv6”:
'all': {
   'CCFLAGS':      ['$DIALECTFLAGS', '$WARNINGFLAGS', '-march=armv6'],
   'CXXFLAGS':     ['-fno-rtti', '-fno-exceptions', '-march=armv6'],
 },

फिर vfp3 और सिम्युलेटर भागों को हटाने के लिए, 157 अंक के आसपास शुरू होने वाली पंक्तियों पर टिप्पणी करें। चूँकि यह JSON जैसी वस्तु है, CPPDEFINESलाइन पर कॉमा को हटाने के लिए याद रखें !

'armeabi:softfp' : {
   'CPPDEFINES' : ['USE_EABI_HARDFLOAT=0']
  # 'vfp3:on': {
  #   'CPPDEFINES' : ['CAN_USE_VFP_INSTRUCTIONS']
  # },
  # 'simulator:none': {
  #   'CCFLAGS':     ['-mfloat-abi=softfp'],
  # }
 },

फिर सामान्य रूप से कॉन्फ़िगर करें, बनाएं, इंस्टॉल करें प्रक्रिया, एनबी I को मैन्युअल रूप से ओपनएसएसएल लिबपैथ के स्थान को निर्दिष्ट करना था:

$ ./configure --openssl-libpath=/usr/lib/ssl 
$ make (to compile node (This took 103 minutes!))
$ sudo make install 

Thats यह, अब आपके पास एक काम करने वाला Node.JS इंस्टॉल होना चाहिए!

$ node -v should show you the version number
$ npm -v should show you the version of the Node Package Manager

* संदर्भ और मूल लेख

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

निष्कर्ष

पाई का एक अच्छा टुकड़ा बुरा नहीं है। आप पाई के बारे में कुछ भी चला सकते हैं- बस उत्पादन स्तर के प्रदर्शन की उम्मीद न करें।


2
ठीक है ... आप सही हैं कि आप शायद एक अतिरिक्त "फ्रंट-एंड" वेब सर्वर जैसे नगनेक्स के साथ Node.js को जोड़ना चाहते हैं। लेकिन "आप एक सी / सी ++ डेवलपर की आवश्यकता है" से क्या मतलब है? जब तक आप Node.js कोर पर काम नहीं करना चाहते हैं या प्लेटफ़ॉर्म-निर्भर मॉड्यूल लिखना नहीं चाहते हैं, तब तक आपको C / C ++ की आवश्यकता नहीं है। जावास्क्रिप्ट आम Node.js ऐप डेवलपर के लिए पर्याप्त है। मैंने आपको कहाँ गलत किया?
गोलो रॉडेन

मेरे पास इसका मतलब यह था कि नोड.जेएस सी / सी ++ में लिखा गया है - जब मैं नोड पर अनुसंधान कर रहा था। जेएस मैं कई साइटों पर आया था जो प्रदर्शित करते थे कि पुस्तकालय का विस्तार कैसे किया जाए। लेकिन सी / सी ++ में शुद्ध ज्ञान की आवश्यकता होती है - अधिकांश उद्देश्यों के लिए - आपको इसकी आवश्यकता नहीं होगी - लेकिन यदि आप कभी भी ऐसी स्थिति में उतरते हैं तो नोड.जेएस गलत समाधान है। जैसा कि मेरे मामले में हुआ।
पियोट्र कुला

मेरा सवाल रास्पबेरी पाई-केंद्रित है --- नोड अनुप्रयोगों के लिए रास्पबेरी पाई कितनी अनुकूल है? अगर ऐसा है, तो मैं आरपीआई को सर्वोत्तम परिणामों के लिए कैसे धुन सकता हूं? --- और नहीं नोड-केंद्रित --- नोड कितना अच्छा या बुरा है? लेकिन आपकी राय के लिए धन्यवाद; मैं इसे और अधिक स्पष्ट करने के लिए प्रारंभिक प्रश्न संपादित करूँगा।
मारीस ब्यूटुक

हाँ, मैंने सवाल का जवाब दिया 1- पाई नोड को संभाल सकती है। जेएस प्लस एक पूर्ण लैंप स्टैक भी! इसे कैसे ठीक किया जाए? यह चर्चा के लिए खुला है। कृपया और अधिक विशिष्ट बनें कि आप किन मानकों को ठीक करना चाहते हैं? मैंने यह भी विस्तार किया कि मुझे क्या लगता है कि प्रदर्शन से मदद मिल सकती है।
पायोतर कुला

1
यदि आप अपने दो उत्तर इस एक में मिला देते हैं तो मैं उत्थान करूंगा।
Jivings

1

प्रश्न: रासबेरी पाई को नोड अनुप्रयोगों के लिए कितना अनुकूल है?

एक: बहुत अच्छी तरह से :) इसके बारे में कोई संदेह नहीं है।

प्रश्न: यदि ऐसा है, तो सबसे अच्छा परिणाम के लिए रास्पबेरी पाई को कैसे ठीक किया जा सकता है?

A: नहीं! बहुत अच्छी तरह से डिज़ाइन किए गए नोड अनुप्रयोगों को लिखने पर ध्यान दें। अपनी एप्लिकेशन स्क्रिप्ट का अनुकूलन करने का तरीका है।

हमेशा एक प्रॉक्सीवर का उपयोग करें, उदाहरण के लिए एनजाइनक्स, बस एक कारण के लिए: नोड.जेएस अभी भी अपने बचपन के वर्षों में (अपाचे के साथ तुलना में) है, इसलिए आप मान सकते हैं कि अभी भी सुरक्षा के मुद्दे हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.