Panduan Permulaan untuk Node.js (Server sisi JavaScript)
Node.js - dengan kata mudah - adalah pelayan sisi JavaScript. Ia telah mendapat banyak buzz hari ini. Jika anda pernah mendengarnya atau anda berminat untuk belajar dan mendapatkan beberapa tangan di atasnya - jawatan ini adalah untuk anda.
Jadi apa sebenarnya keperluan menggunakan JavaScript di pelayan? Untuk membuat konsep Node.js jelas saya ingin membandingkannya dengan bahasa pelayan sisi biasa seperti PHP. Node.js menggunakan prosedur pelaksanaan pelayan berasaskan peristiwa bukan pelaksanaan yang multithreaded dalam PHP.
Untuk menerangkannya lagi, kita akan bercakap tentang idea apa yang Node.js itu bersama dengan beberapa cadangan penyedia hosting dan petua pemasangan. Pengetahuan tahap pertengahan tentang JavaScript, jQuery dan Ajax diperlukan, tetapi kami juga akan memberikan contoh bagi anda untuk memahami keseluruhan perkara yang lebih mudah dan bahkan mengerjakannya, jadi mari mengenali lebih lanjut mengenai Node.js!
Mari kita pertimbangkan satu kes:
Pertimbangkan tapak web di mana anda perlu memuat kandungan secara dinamik dari pelayan web yang lain yang lambat. Dalam PHP anda boleh melakukannya dalam 2 cara - mengodkannya dalam fail yang mudah dan mengodkannya sebagai skrip lain, kemudian melaksanakannya dalam pendekatan multithreaded.
Dalam kaedah pertama walaupun kod itu mudah pelaksanaannya berhenti sebentar pada titik di mana pelayan web lambat diakses. Kaedah kedua ialah lebih optimum jika berlaku prestasi tetapi sukar untuk kod dan ia mempunyai overhead pengurusan yang banyak. Kes ini adalah serupa untuk kebanyakan bahasa pengaturcaraan web selain JavaScript sisi server, iaitu, Node.js.
Apakah perbezaan di Node.js? Untuk memahami Node.js, anda mesti ingat perkara itu Pengaturcaraan berdasarkan JavaScript dalam pelayar. Kami menggunakan teknologi yang sama di sini. Daripada menggunakan benang berasingan, a fungsi dilampirkan pada acara selesai daripada “akses pelayan web lambat” disebutkan di atas, dengan itu anda dapat fungsi penuh dalam pilihan kedua yang dioptimumkan yang disebut di atas tanpa overhead multithread.
Bermula dengan Node.js
Node.js adalah JavaScript. Mengapa kami tidak menggunakan fungsi berasaskan acara JavaScript dalam klien ke pelayan? Pemikiran ini mungkin membawa kepada pembangunan Node.js.
Yang berkata, kemuncak utama Node.js - ia adalah fungsi asynchronous berasaskan acara. Ia menggunakan gelung acara dan bukannya menunggu operasi I / O (mengakses perkhidmatan web luaran, mengakses perkakasan).
Node.js masih boleh menggunakan kuasa pemprosesannya apabila pelayan sedang menunggu operasi lain. Ini menjadikan Node.js berskala kepada berjuta-juta sambungan serentak.
Bagaimana JavaScript Run Pada Pelayan?
Node.js berfungsi pada persekitaran v8 - ia adalah mesin maya atau a Enjin JavaScript yang menjalankan kod JavaScript, jadi untuk hosting anda tidak boleh menggunakan tuan rumah web biasa. Anda akan memerlukan orang-orang yang mempunyai persekitaran v8.
Berikut adalah beberapa cadangan penyedia untuk hosting Node.js:
- Awan Foundry
- Cloudnode
- DotCloud
- Duostack
Memasang Node.js
Node akan berfungsi dengan sempurna di sistem operasi Linux, Macintosh, dan Solaris. Di Windows anda boleh memasangnya menggunakan lapisan emulasi Cygwin. Tidak ada yang membina dalam Windows yang memuaskan tetapi masih mungkin untuk mendapatkan sesuatu yang berjalan.
Pilihan 1: Membina Node dari sumber.
Guna buat
untuk membina dan memasang node.js (laksanakan yang berikut pada baris arahan). Git diperlukan.
git klon --depth 1 git: //github.com/joyent/node.git cd nod JOBS git checkout v0.4.11 eksport = 2 mkdir ~ / tempatan ./configure --prefix = $ HOME / local / nod membuat membuat memasang echo 'export PATH = $ HOME / local / node / bin: $ PATH' >> ~ / .profile echo 'eksport NODE_PATH = $ HOME / local / nod: $ HOME / local / node / lib / node_modules' >> ~ / .profile sumber ~ / .profile
Pilihan 2: Memasang Node.js dari Pakej
Untuk pengguna Mac, anda boleh memasang Node.js sebagai pakej dari https://sites.google.com/site/nodejsmacosx/ yang cukup jelas.
Menguji Pemasangan Nod
Untuk memeriksa pemasangan Node yang berjaya, kami boleh mencuba program "Hello World" konsol yang sangat mudah. Buat fail bernama "test.js"dan tulis kod berikut ke dalamnya.
var sys = require ("sys"); sys.puts ("Hello World");
Penerangan kod:
Ia memuat sys
kelas menjadi pembolehubah sys
. Ia kemudiannya menggunakan sys
objek untuk melaksanakan tugas konsol. The sys.puts
adalah perintah yang serupa dengan cout
di C ++, jadi untuk menjalankan skrip di atas pergi ke command prompt dan jalankannya dengan perintah di bawah ini:
test.js nod
Sekiranya pemasangan anda berjaya maka anda akan mendapat keluaran dunia hello di skrin.
Mewujudkan Pelayan HTTP
Kini tiba masanya untuk mencipta "Hello World" melalui pelayan web menggunakan Node.js. Inilah yang akan kita lakukan - kita buat pelayan yang menghasilkan a “Hai dunia” ke localhost di port 8080 tidak kira apa URL itu, memberi anda idea apa acara adalah.
Kod:
var sys = require ("sys"), my_http = require ("http"); my_http.createServer (fungsi (permintaan, tindak balas) sys.puts ("saya mendapat ditendang"); response.writeHeader (200, "Content-Type": "text / plain"); response.write ("Hello World "); response.end ();). mendengar (8080); sys.puts ("Server Running on 8080");
Penerangan kod:
Bahagian yang paling menarik dalam Node.js ialah pengaturcaraan berasaskan acara. Untuk mewujudkan pelayan HTTP, kami memerlukannya Perpustakaan HTTP, jadi kita pergi ke hadapan dan menambahnya my_http
. Kami mewujudkan pelayan dengan fungsi:
my_http.createServer (fungsi (permintaan, tindak balas) ). dengar (8080);
Fungsi yang diberikan sebagai hujah pertama dilaksanakan setiap kali kejadian dicetuskan di port 8080, jadi fungsi itu sendiri mencadangkan nod untuk mendengar peristiwa di port 8080. Untuk mengesan ini, saya telah menambah “Saya mendapat ditendang” mesej yang akan dipaparkan pada skrin konsol apabila permintaan diterima.
The permintaan
objek mengandungi semua maklumat mengenai permintaan yang telah dibuat kepada pelayan. Sebagai contoh ia mengandungi rentetan URL. The tindak balas
objek adalah objek yang mengendalikan respons dari pelayan. Mula-mula kita tetapkan tajuk respons sebagai teks / kosong
kandungan, kemudian output “Hai dunia“, kemudian tamatkan aliran output. 200 adalah tindak balas status.
Nah, yang di atas adalah contoh yang sangat mudah tetapi kita dapat melihat bahawa apa sahaja URL yang kita berikan dalam pelayar untuk pelayan yang sama kita mendapat output yang sama seperti “Hai dunia”.
Mewujudkan pelayan fail statik yang mudah
Mari buat pelayan fail statik mudah dalam tutorial seterusnya.
Kod:
var sys = require ("sys"), my_http = require ("http"), path = require ("path"), url = require ("url"), filesys = require ("fs"); my_http.createServer (function (permintaan, tindak balas) var my_path = url.parse (request.url) .pathname; var full_path = path.join (process.cwd (), my_path); path.exists (full_path, fungsi (wujud ) if (! wujud) response.writeHeader (404, "Content Type": "text / plain"); response.write ("404 Not Found \ n"); response.end (); filesys.readFile (full_path, "binari", fungsi (err, fail) if (sesat) response.writeHeader (500, "Content-Type": "text / plain"); response.write (err + "\ n"); response.end (); lain response.writeHeader (200); response.write (file, "binary"); response.end ();););). dengar (8080); sys.puts ("Server Running on 8080");
Penjelasan kod:
Kod di atas agak mudah, kami akan membincangkannya sebagai blok.
var sys = require ("sys"), my_http = require ("http"), path = require ("path"), url = require ("url"), filesys = require ("fs");
Semua perpustakaan ini diperlukan untuk program ini. Penggunaannya akan jelas dalam kod berikut.
var my_path = url.parse (request.url) .pathname; var full_path = path.join (process.cwd (), my_path);
The permintaan
objek mempunyai butiran permintaan seperti yang telah dibincangkan sebelumnya. Kami menggunakannya parse
fungsi kelas URL yang kami sertakan untuk mendapatkannya nama laluan
daripada URL permintaan. Selepas mendapat nama laluan kami menggabungkannya dengan laluan direktori kerja semasa untuk mendapatkan laluan penuh fail.
Untuk menyertai URL kami mempunyai fungsi yang dipanggil menyertai
di perpustakaan laluan.
path.exists (full_path, function (wujud)
Selepas mendapat laluan penuh, kita periksa sama ada jalan itu wujud dengan fungsi itu wujud
. Selepas cek dilakukan fungsi panggil balik dipanggil dan diluluskan sebagai hujah kedua.
jika (! wujud) response.writeHeader (404, "Jenis Kandungan": "teks / kosong"); response.write ("404 Not Found \ n"); response.end (); filesys.readFile (full_path, "binary", function (err, file) if (err) response.writeHeader (500, "Type-Type": "text / plain"); response.write ( err + "\ n"); response.end (); else response.writeHeader (200); response.write (file, "binary"); response.end (););
Sekarang dalam fungsi panggil balik jika fail tidak wujud kami menghantar "404 halaman tidak dijumpai"ralat.
Jika halaman dijumpai maka kita membaca fail oleh readFile
fungsi dalam sistem fail. Kita juga boleh melihat fungsi panggil balik bagi readFile
fungsi ditakrifkan di sana sendiri. Jika tidak ada kesilapan dalam membaca fail itu maka akan dipaparkan. Sekiranya terdapat kesilapan maka status 500 dikembalikan dengan teks ralat.
Saya juga mengesyorkan membungkus kod tutorial sebelumnya ke dalam fungsi supaya anda boleh menggunakannya dalam tutorial seterusnya atau untuk kegunaan masa depan.
var sys = require ("sys"), my_http = require ("http"), path = require ("path"), url = require ("url"), filesys = require ("fs"); my_http.createServer (function (permintaan, tindak balas) var my_path = url.parse (request.url) .pathname; var full_path = path.join (process.cwd (), my_path); path.exists (full_path, fungsi (wujud ) if (! wujud) response.writeHeader (404, "Content Type": "text / plain"); response.write ("404 Not Found \ n"); response.end (); filesys.readFile (full_path, "binary", function (err, file) if (err) response.writeHeader (500, "Content-Type": "text / plain"); response.write (err + "\ n"); response.end (); else response.writeHeader (200); response.write (file, "binary"); response.end (););); my_http. createServer (function (permintaan, tindak balas) var my_path = url.parse (request.url) .pathname; load_file (my_path, tindak balas);). mendengar (8080); sys.puts ( "Server Berjalan pada 8080");
Tinggal Tuned !
Itu sahaja. Harap ini memberikan anda idea yang baik tentang Node.js. Dalam artikel seterusnya, saya akan menunjukkan kepada anda cara untuk beban dan bilangan paparan Facebook suka menggunakan Node.js. Tinggal!
Nota editor: Jawatan ini ditulis oleh Geo Paul untuk Hongkiat.com. Geo adalah pemaju Web / iPhone bebas yang suka bekerja dengan PHP, Codeigniter, WordPress, jQuery dan Ajax. Beliau mempunyai 4 tahun pengalaman dalam PHP dan 2 tahun pengalaman iniPengembangan aplikasi telefon.