Οδηγός για αρχάριους στο Node.js (JavaScript από την πλευρά του διακομιστή)
Node.js - με απλά λόγια - είναι διακομιστή JavaScript. Έχει πάρει πολύ buzz αυτές τις μέρες. Αν έχετε ακούσει για αυτό ή σας ενδιαφέρει να μάθετε και να πάρετε κάποια χέρια σε αυτό - αυτή η θέση είναι για σας.
Τι ακριβώς είναι η ανάγκη χρήσης του JavaScript στο διακομιστή; Για να καταστεί σαφής η έννοια του Node.js, θα ήθελα να το συγκρίνω με τις συνηθισμένες γλώσσες διακομιστή, όπως η PHP. Το Node.js χρησιμοποιεί ένα διαδικασία εκτέλεσης διακομιστή βάσει συμβάντος αντί για την πολυνηματική εκτέλεση στην PHP.
Για να το εξηγήσω περαιτέρω, θα μιλήσουμε για την ιδέα τι είναι το Node.js μαζί με μερικούς προτάσεις φιλοξενίας παρόχων και συμβουλές εγκατάστασης. Είναι απαραίτητη η γνώση του JavaScript, του jQuery και του Ajax σε ενδιάμεσο επίπεδο, αλλά θα παράσχουμε επίσης παραδείγματα για να κατανοήσετε ευκολότερα όλο το πράγμα και ακόμη και να εργαστείτε σε αυτό, οπότε ας μάθουμε περισσότερα για το Node.js!
Ας εξετάσουμε μια υπόθεση:
Σκεφτείτε έναν ιστότοπο στον οποίο πρέπει να φορτώσετε δυναμικά περιεχόμενο από έναν άλλο διακομιστή ιστού που είναι αργός. Στην PHP μπορείτε να το κάνετε με 2 τρόπους - κωδικοποιώντας το σε ένα απλό αρχείο και κωδικοποιώντας το ως άλλο σενάριο, έπειτα εκτελώντας το σε μια πολυνηματική προσέγγιση.
Στην πρώτη μέθοδο, παρόλο που ο κώδικας είναι απλός η εκτέλεση παύει για λίγο στο σημείο όπου έχει πρόσβαση ο αργός διακομιστής ιστού. Η δεύτερη μέθοδος είναι πιο βελτιστοποιημένη σε περίπτωση απόδοσης αλλά είναι δύσκολο να κωδικοποιηθεί και έχει μια πολυεπίπεδο διαχείριση γενικά. Η περίπτωση είναι παρόμοια για τις περισσότερες από τις γλώσσες προγραμματισμού ιστού, εκτός από την JavaScript από την πλευρά του διακομιστή, δηλ. Το Node.js.
Ποια είναι η διαφορά στο Node.js? Για να κατανοήσετε το Node.js, πρέπει να έχετε υπόψη σας Προγραμματισμός βάσει συμβάντων της JavaScript στο πρόγραμμα περιήγησης. Χρησιμοποιούμε την ίδια τεχνολογία εδώ. Αντί να χρησιμοποιήσετε ένα ξεχωριστό νήμα, α η λειτουργία είναι συνδεδεμένη με το συμβάν τελειώματος απο “αργή πρόσβαση στο διακομιστή web” που αναφέρθηκε παραπάνω, έτσι παίρνετε το πλήρη λειτουργικότητα στη βελτιστοποιημένη δεύτερη επιλογή που αναφέρθηκε παραπάνω, χωρίς καμία επιβάρυνση πολλαπλών στρώσεων.
Ξεκινώντας με το Node.js
Το Node.js είναι JavaScript. Γιατί δεν μπορούμε να χρησιμοποιήσουμε τη λειτουργικότητα που βασίζεται σε συμβάντα JavaScript στον πελάτη σε ένα διακομιστή; Αυτή η σκέψη θα μπορούσε να έχει οδηγήσει στην ανάπτυξη του Node.js.
Τούτου λεχθέντος, το κύριο χαρακτηριστικό του Node.js - είναι ασύγχρονες λειτουργίες βάσει συμβάντων. Χρησιμοποιεί ένα βρόχου συμβάντος αντί να περιμένει λειτουργίες I / O (πρόσβαση σε εξωτερική υπηρεσία web, πρόσβαση σε υλικό).
Node.js θα μπορούσε να εξακολουθεί να χρησιμοποιήσει την ισχύ επεξεργασίας του όταν ο διακομιστής περιμένει οποιαδήποτε άλλη ενέργεια. Αυτό κάνει το Node.js ανάβατος σε εκατομμύρια ταυτόχρονες συνδέσεις.
Πώς λειτουργεί το JavaScript σε διακομιστή?
Το Node.js λειτουργεί σε περιβάλλον v8 - είναι α εικονική μηχανή ή α Μηχανή JavaScript που τρέχει τον κώδικα JavaScript, έτσι ώστε για τη φιλοξενία δεν μπορείτε να χρησιμοποιήσετε τους συνηθισμένους οικοδεσπότες Ιστού. Θα χρειαστείτε αυτά που έχουν το v8 περιβάλλον.
Ακολουθούν ορισμένες προτάσεις παροχέων για τη φιλοξενία του Node.js:
- Cloud Foundry
- Cloudnode
- DotCloud
- Duostack
Εγκατάσταση του Node.js
Ο κόμβος θα λειτουργούν τέλεια σε λειτουργικά συστήματα Linux, Macintosh και Solaris. Στα Windows μπορείτε να το εγκαταστήσετε χρησιμοποιώντας το επίπεδο εξομοίωσης Cygwin. Καμία από τις κατασκευές στα Windows δεν είναι ικανοποιητική, αλλά εξακολουθεί να είναι δυνατή η εκτέλεση κάτι.
Επιλογή 1: Κατασκευή κόμβου από την πηγή.
Χρήση φτιαχνω, κανω
για να δημιουργήσετε και να εγκαταστήσετε το node.js (εκτελέστε τα παρακάτω στη γραμμή εντολών). Το Git απαιτείται.
git clone -depth 1 git: //github.com/joyent/node.git cd κόμβος git checkout v0.4.11 εξαγωγή JOBS = 2 mkdir ~ / local ./configure --prefix = $ ΑΡΧΙΚΗ / τοπική / κόμβος make make install echo 'εξαγωγή PATH = $ HOME / τοπικός / κόμβος / bin: $ PATH' >> ~ / .profile echo 'εξαγωγή NODE_PATH = $ HOME / τοπικός / κόμβος: $ HOME / .profile source / .profile
Επιλογή 2: Εγκατάσταση του Node.js από το πακέτο
Για χρήστες Mac, μπορείτε να εγκαταστήσετε το Node.js ως πακέτο από https://sites.google.com/site/nodejsmacosx/ το οποίο είναι αρκετά αυτονόητο.
Δοκιμή εγκατάστασης κόμβου
Για να ελέγξετε την επιτυχημένη εγκατάσταση του κόμβου σας, μπορείτε να δοκιμάσετε ένα απλό πρόγραμμα κονσόλας "Hello World". Δημιουργήστε ένα αρχείο που ονομάζεται "test.js"και γράψτε τον ακόλουθο κώδικα σε αυτό.
var sys = απαιτούν ("sys"); sys.puts ("Hello World").
Εξήγηση κώδικα:
Το φορτίζει sys
ταξινόμηση σε μια μεταβλητή sys
. Στη συνέχεια χρησιμοποιεί το sys
αντικείμενο για να εκτελέσετε τις εργασίες της κονσόλας. ο sys.puts
είναι μια εντολή παρόμοια με την εντολή cout
στο C ++, οπότε για να εκτελέσετε το παραπάνω σενάριο, πηγαίνετε στη γραμμή εντολών και εκτελέστε την με την παρακάτω εντολή:
κόμβος test.js
Αν η εγκατάστασή σας είναι επιτυχής, τότε θα λάβετε ένα hello world output στην οθόνη.
Δημιουργία διακομιστή HTTP
Τώρα είναι καιρός να δημιουργήσετε ένα "Hello World" μέσω του web server χρησιμοποιώντας το Node.js. Εδώ πρόκειται να κάνουμε - εμείς δημιουργήστε ένα διακομιστή που εξάγει a “Γειά σου Κόσμε” στο τοπικό host στο λιμάνι 8080 ανεξάρτητα από το τι είναι η διεύθυνση URL, δίνοντάς σας μια ιδέα τι Εκδήλωση είναι.
Οι κωδικοί:
var sys = απαιτούν ("sys"), my_http = απαιτούν ("http"); my_http.createServer (λειτουργία (αίτημα, απάντηση) sys.puts ("πήρα κλώτσηση"), response.writeHeader (200, "Τύπος περιεχομένου": "text / plain") "); response.end ();) ακούστε (8080); sys.puts ("Διακομιστής που εκτελείται σε 8080")?
Εξήγηση κώδικα:
Το πιο ενδιαφέρον κομμάτι του Node.js είναι ο προγραμματισμός που βασίζεται σε γεγονότα. Για τη δημιουργία ενός διακομιστή HTTP χρειαζόμαστε το Βιβλιοθήκη HTTP, οπότε προχωρούμε προς τα εμπρός και προσθέτουμε τη χρήση my_http
. Δημιουργούμε διακομιστή με τη συνάρτηση:
my_http.createServer (λειτουργία (αίτημα, απάντηση) ) ακούστε (8080);
Η συνάρτηση που δίνεται ως το πρώτο όρισμα εκτελείται κάθε φορά που ενεργοποιείται ένα συμβάν στη θύρα 8080, έτσι η ίδια η λειτουργία προτείνει στον κόμβο να ακούει ένα συμβάν στη θύρα 8080. Για να ανιχνεύσω αυτό, έχω προσθέσει ένα “Μου πήρε κλώτση” μήνυμα που θα εμφανίζεται στην οθόνη της κονσόλας κάθε φορά που λαμβάνεται ένα αίτημα.
ο αίτηση
αντικείμενο περιέχει όλες τις πληροφορίες σχετικά με το αίτημα που έχει γίνει στο διακομιστή. Για παράδειγμα, περιέχει τη συμβολοσειρά URL. ο απάντηση
αντικείμενο είναι το αντικείμενο χειρίζεται την απόκριση από το διακομιστή. Αρχικά ορίσαμε την κεφαλίδα της απάντησης ως a κείμενο / απλό
περιεχομένου και μετά εξόδου “Γειά σου Κόσμε“, τότε τερματίζει τη ροή εξόδου. 200 είναι η αντίδραση κατάστασης.
Λοιπόν, το παραπάνω είναι ένα πολύ απλό παράδειγμα, αλλά μπορούμε να δούμε ότι όποια διεύθυνση URL δίνουμε στο πρόγραμμα περιήγησης για τον ίδιο διακομιστή έχουμε την ίδια έξοδο όπως “Γειά σου Κόσμε”.
Δημιουργία απλού στατικού διακομιστή αρχείων
Ας δημιουργήσουμε έναν απλό στατικό διακομιστή αρχείων στο επόμενο tutorial.
Οι κωδικοί:
var sys = απαιτούν ("sys"), my_http = απαιτούν ("http"), path = require ("path"), url = require ("url"), filesys = require ("fs"); my_http.createServer (λειτουργία (αίτημα, απάντηση) var my_path = url.parse (request.url) .pathname; var full_path = path.join (process.cwd (), my_path) path.exists ) if (! exists) answer.writeHeader (404, "Τύπος περιεχομένου": "text / plain") if (err) response.writeHeader (500, "Τύπος περιεχομένου": "κείμενο / απλό"), response.write (err + " , . ακούστε (8080); sys.puts ("Διακομιστής που εκτελείται σε 8080")?
Εξήγηση κωδικών:
Ο παραπάνω κώδικας είναι αρκετά απλός, θα το συζητήσουμε ως μπλοκ.
var sys = απαιτούν ("sys"), my_http = απαιτούν ("http"), path = require ("path"), url = require ("url"), filesys = require ("fs");
Όλες αυτές οι βιβλιοθήκες απαιτούνται για το πρόγραμμα. Η χρήση του θα είναι ξεκάθαρη στον ακόλουθο κώδικα.
var my_path = διεύθυνση url.parse (request.url) .pathname; var full_path = path.join (process.cwd (), my_path).
ο αίτηση
αντικείμενο έχει τα στοιχεία των αιτημάτων όπως συζητήσαμε προηγουμένως. Χρησιμοποιούμε το αναλύω πρόταση
λειτουργία της κλάσης URL που έχουμε συμπεριλάβει για να πάρουμε το όνομα διαδρομής
της διεύθυνσης URL αίτησης. Αφού πάρουμε το όνομα διαδρομής, το συγκαλύπτουμε με τη διαδρομή του τρέχοντος καταλόγου εργασίας για να πάρουμε την πλήρη διαδρομή του αρχείου.
Για τη σύνδεση των διευθύνσεων URL έχουμε μια λειτουργία που ονομάζεται Συμμετοχή
στη βιβλιοθήκη διαδρομών.
path.exists (full_path, λειτουργία (υπάρχει)
Αφού πάρουμε την πλήρη διαδρομή ελέγξουμε αν υπάρχει η διαδρομή από τη λειτουργία υπάρχει
. Αφού γίνει ο έλεγχος, η λειτουργία επανάκλησης καλείται και μεταβιβάζεται ως το δεύτερο όρισμα.
εάν (! υπάρχει) response.writeHeader (404, "Τύπος περιεχομένου": "κείμενο / απλό"); response.write ("Δεν βρέθηκε 404 \ n"); response.end (); αλλιώς filesys.readFile (πλήρης_διαδρομή, "δυαδική", λειτουργία (err, αρχείο) if (err) response.writeHeader (500, "Content-Type" err + "\ n"); response.end (); αλλιώς response.writeHeader (200)? response.write (αρχείο, "binary");
Τώρα στη λειτουργία επανάκλησης, αν το αρχείο δεν υπάρχει, στέλνουμε ένα μήνυμα "404 Η σελίδα δεν βρέθηκε" λάθος.
Αν βρεθεί η σελίδα τότε διαβάζουμε το αρχείο από το readFile
λειτουργία στο σύστημα αρχείων. Μπορούμε επίσης να δούμε τη λειτουργία επανάκλησης για το readFile
λειτουργία που ορίζεται εκεί. Εάν δεν υπάρχει σφάλμα κατά την ανάγνωση του αρχείου τότε θα εμφανιστεί. Εάν υπάρχει σφάλμα τότε επιστρέφεται κατάσταση 500 με το κείμενο σφάλματος.
Προτείνω επίσης να τυλίξετε τους κώδικες του προηγούμενου σεμιναρίου σε μια λειτουργία, ώστε να μπορείτε να το χρησιμοποιήσετε στο επόμενο σεμινάριο ή για μελλοντική χρήση.
var sys = απαιτούν ("sys"), my_http = απαιτούν ("http"), path = require ("path"), url = require ("url"), filesys = require ("fs"); my_http.createServer (λειτουργία (αίτημα, απάντηση) var my_path = url.parse (request.url) .pathname; var full_path = path.join (process.cwd (), my_path) path.exists ) if (! exists) answer.writeHeader (404, "Τύπος περιεχομένου": "text / plain") if (err) response.writeHeader (500, "Τύπος περιεχομένου": "κείμενο / απλό"), response.write (err + " else answer.writeHeader (200) · response.write (αρχείο," binary "); response.end (););); my_http. ΔημιουργίαServer (λειτουργία (αίτημα, απόκριση) var my_path = url.parse (request.url) .name_name; load_file (my_path, response);)) ακούω (8080) sys.puts ("Server Running on 8080");
Μείνετε συντονισμένοι !
Αυτό είναι όλο. Ελπίδα αυτό σας δίνει μια καλή ιδέα του Node.js. Στο επόμενο άρθρο, θα σας δείξω πώς να το φορτίο και ο αριθμός εμφάνισης του Facebook θέλει χρησιμοποιώντας το Node.js. Μείνετε συντονισμένοι!
Σημείωση του συντάκτη: Αυτή η ανάρτηση είναι γραμμένη από Geo Paul για το Hongkiat.com. Ο Geo είναι ανεξάρτητος προγραμματιστής Ιστού / iPhone που απολαμβάνει να εργάζεται με PHP, Codeigniter, WordPress, jQuery και Ajax. Έχει 4 χρόνια εμπειρίας στην PHP και 2 χρόνια εμπειρίας στην ανάπτυξη εφαρμογών iniPhone.