Node.js ialah persekitaran JavaScript yang direka khusus untuk membina aplikasi web yang cekap dan berskala. Apabila melaksanakan pelayan sembang, adalah sangat penting untuk menggunakan mekanisme konkurensi bagi memastikan pelayan dapat mengendalikan sejumlah besar pengguna dalam talian pada masa yang sama. Artikel ini akan memperkenalkan cara melaksanakan mekanisme konkurensi pelayan sembang dalam Node.js.
1 Gunakan modul Kluster dalam Node.js
Modul Kluster dalam Node.js boleh membantu kami mencapai pemprosesan serentak berbilang proses. Melalui modul Kluster, kami boleh memulakan berbilang proses Node.js pada pelayan yang sama untuk memproses permintaan pengguna pada masa yang sama, dan menyelaraskan pemprosesan melalui mekanisme pemesejan antara proses. Kelebihan menggunakan modul Kluster ialah ia mudah dan mudah digunakan, dan hanya memerlukan beberapa konfigurasi untuk mencapai pemprosesan serentak berbilang proses asasnya ialah mungkin terdapat ketidakupayaan untuk menyelaraskan antara proses, dan keperluan mekanisme penghantaran mesej; untuk dikendalikan dengan betul dan status berjalan proses perlu dipantau tepat pada masanya.
Berikut ialah kod asas untuk melaksanakan pelayan sembang menggunakan modul Kluster:
const cluster = require('cluster'); const numCPUs = require('os').cpus().length; if (cluster.isMaster) { // Fork workers. for (let i = 0; i < numCPUs; i++) { cluster.fork(); } cluster.on('exit', (worker, code, signal) => { console.log(`worker ${worker.process.pid} died`); }); } else { // Worker code. const http = require('http'); const server = http.createServer((req, res) => { // Request handling code. }); server.listen(8000, () => { console.log('Server running at http://localhost:8000/'); }); }
Dalam kod di atas, apabila proses utama bermula, ia akan memulakan proses yang sama dengan bilangan CPU dan keluar selepas proses Pemprosesan yang sepadan dilakukan dalam proses anak, pelayan HTTP dimulakan dan permintaan pengguna diproses.
2. Gunakan modul EventEmitter dalam Node.js
Modul EventEmitter dalam Node.js boleh membantu kami melaksanakan pemprosesan serentak dipacu peristiwa. Melalui modul EventEmitter, kami boleh mencipta pelbagai acara di bahagian pelayan Apabila pengguna mengambil tindakan yang sepadan, pelayan akan secara automatik mencetuskan fungsi pemprosesan acara yang sepadan. Kelebihan menggunakan modul EventEmitter ialah ia sangat berskala dan bebas menambah atau memadam fungsi pemprosesan acara mengikut keperluan acara yang berbeza ialah ia memerlukan pengurusan yang betul bagi urutan pelaksanaan fungsi pemprosesan acara dan penyelarasan proses pemprosesan; .
Berikut ialah kod asas untuk melaksanakan pelayan sembang menggunakan modul EventEmitter:
const EventEmitter = require('events'); const server = new EventEmitter(); server.on('connect', (client) => { // Client connected handling code. }); server.on('message', (client, message) => { // Message handling code. }); server.on('disconnect', (client) => { // Client disconnected handling code. }); // Server code. const net = require('net'); const serverSocket = net.createServer((socket) => { const client = new Client(socket); server.emit('connect', client); socket.on('data', (data) => { server.emit('message', client, data); }); socket.on('close', () => { server.emit('disconnect', client); }); }); serverSocket.listen(8080, () => { console.log('Server running at http://localhost:8080/'); });
Dalam kod di atas, kami mentakrifkan tiga peristiwa berbeza: connect
(sambungan pelanggan), message
(pemprosesan mesej) dan disconnect
(pemutus sambungan pelanggan). Apabila pelanggan menyambung, pelayan akan mencetuskan acara connect
, dan kemudian terus memproses permintaan pelanggan dalam fungsi pengendali acara yang sepadan apabila pelanggan menghantar mesej, pelayan akan mencetuskan acara message
dan meneruskan pemprosesan permintaan pelanggan dalam fungsi pengendali acara yang sepadan Teruskan memproses mesej apabila pelanggan memutuskan sambungan, pelayan akan mencetuskan acara disconnect
dan terus memproses permintaan putus sambungan pelanggan dalam fungsi pengendalian acara yang sepadan.
3 Gunakan modul Async dalam Node.js
Modul Async dalam Node.js boleh membantu kami mencapai pemprosesan tak segerak dan serentak. Melalui modul Async, kami boleh memanggil berbilang tugas tak segerak pada bahagian pelayan, dan kemudian tunggu semua tugas tak segerak selesai sebelum meneruskan memproses permintaan yang tinggal. Kelebihan menggunakan modul Async ialah ia dapat menyelesaikan masalah neraka panggil balik dengan lebih berkesan dan mengurus aliran pemprosesan tak segerak pada bahagian pelayan dengan lebih baik ialah berbanding dengan modul EventEmitter, kebolehskalaannya sedikit lemah.
Berikut ialah kod asas untuk melaksanakan pelayan sembang menggunakan modul Async:
const async = require('async'); const server = net.createServer((socket) => { const client = new Client(socket); async.parallel([ (callback) => { // Async task 1. }, (callback) => { // Async task 2. }, (callback) => { // Async task 3. } ], (err, results) => { if (err) { // Error handling code. } else { // Success handling code. } }); }); server.listen(8080, () => { console.log('Server running at http://localhost:8080/'); });
Dalam kod di atas, kami mentakrifkan tiga fungsi tugas tak segerak yang berbeza dan menyerahkannya kepada Kaedah. Apabila semua tugas tak segerak selesai, kaedah parallel
akan mencetuskan fungsi panggil balik secara automatik dan menghantar keputusan yang sepadan serta maklumat ralat. parallel
Atas ialah kandungan terperinci Bagaimana untuk menjalankan pelayan sembang nodejs secara serentak. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!