nodejs menutup fungsi pelayan

WBOY
Lepaskan: 2023-05-13 20:07:06
asal
749 orang telah melayarinya

Dengan pembangunan berterusan dan aplikasi teknologi Node.js, aplikasi membina pelayan web semakin meluas. Semasa proses pembangunan, kami sering menghadapi keperluan: tutup pelayan. Jadi bagaimana anda menutup pelayan dengan tepat dan anggun dalam aplikasi Node.js? Artikel ini akan memperincikan cara menggunakan Node.js untuk membina aplikasi yang boleh mematikan pelayan dengan baik.

1. Memulakan dan menutup pelayan Node.js
Dalam Node.js, memulakan pelayan adalah sangat mudah dan anda hanya perlu menggunakan modul http terbina dalam. Contohnya:

const http = require('http');
const server = http.createServer((req, res) => {
    res.end('Hello World!');
});
server.listen(3000, () => {
    console.log('Server is running on port 3000');
});
Salin selepas log masuk

Kod di atas mencipta pelayan HTTP dan mengikatnya ke port 3000. Sudah tentu, anda juga boleh menggunakan rangka kerja seperti Express untuk mencipta pelayan web. Tetapi tidak kira rangka kerja yang digunakan, kaedah menutup pelayan pada dasarnya adalah sama.

Apabila kita perlu menutup pelayan, kita boleh menggunakan salah satu daripada dua kaedah berikut.

1. Gunakan Ctrl + C untuk menamatkan proses secara paksa
Apabila kita memulakan aplikasi Node.js menggunakan baris arahan, kita boleh menamatkan proses dengan menekan kombinasi kekunci Ctrl + C. Kaedah ini mudah dan pantas, tetapi ia tidak elegan dan tidak melakukan beberapa kerja pembersihan yang diperlukan, yang mungkin menyebabkan beberapa masalah.

2. Matikan pelayan dengan mendengar isyarat SIGINT
Dalam Node.js, anda boleh mendengar peristiwa isyarat dan melakukan beberapa operasi apabila peristiwa itu berlaku. Kami boleh menutup pelayan dengan baik dengan mendengar peristiwa isyarat SIGINT dan melakukan beberapa operasi yang diperlukan, seperti melepaskan sumber, keadaan simpanan, dsb. Berikut ialah contoh kod:

const http = require('http');
const server = http.createServer((req, res) => {
    res.end('Hello World!');
});
server.listen(3000, () => {
    console.log('Server is running on port 3000');
});

process.on('SIGINT', () => {
    console.log('Received SIGINT signal, shutting down server...');
    server.close(() => {
        console.log('Server has been shut down.');
        process.exit();
    });
});
Salin selepas log masuk

Dalam kod di atas, kami mendengar isyarat SIGINT melalui objek proses Apabila isyarat dicetuskan, maklumat log dikeluarkan dan pelayan web ditutup dengan baik. Kaedah server.close() dalam kod boleh menghentikan pelayan dan melaksanakan fungsi panggil balik selepas semua sambungan diputuskan. Dalam fungsi panggil balik, kami mengeluarkan maklumat tentang menutup pelayan dan keluar dari proses menggunakan kaedah process.exit().

Perlu diingat bahawa dalam penggunaan sebenar, kami mungkin perlu melakukan beberapa operasi tambahan, seperti menyimpan keadaan ke pangkalan data, menghantar e-mel pemberitahuan, dsb. Operasi ini boleh diletakkan dalam fungsi panggil balik untuk memastikan ia dilaksanakan apabila pelayan ditutup.

2. Penutupan anggun pelayan Node.js
Dalam contoh di atas, kami telah menyelesaikan proses asas penutupan pelayan. Walau bagaimanapun, dalam aplikasi sebenar, beberapa pengoptimuman mungkin diperlukan untuk memastikan penutupan pelayan yang lebih anggun.

1. Tamat masa untuk memproses permintaan
Apabila pelayan web memproses permintaan, jika permintaan mengambil masa terlalu lama, pelayan mungkin tidak ditutup dengan betul. Oleh itu, sebelum menutup pelayan, kami perlu berhenti memproses semua permintaan atau menetapkan tamat masa untuk permintaan bagi memastikan pemprosesan selesai dalam tempoh tamat.

const http = require('http');
const server = http.createServer((req, res) => {
    res.end('Hello World!');
});
server.listen(3000, () => {
    console.log('Server is running on port 3000');
});

let connections = [];

server.on('connection', (connection) => {
    connections.push(connection);
    connection.on('close', () => {
        const index = connections.indexOf(connection);
        if (index !== -1) {
            connections.splice(index, 1);
        }
    });
});

function closeConnections() {
    console.log('Closing all connections...');
    connections.forEach((connection) => {
        connection.end();
    });
    setTimeout(() => {
        connections.forEach((connection) => {
            connection.destroy();
        });
        server.close(() => {
            console.log('Server has been shut down.');
            process.exit();
        });
    }, 10000);
}

process.on('SIGINT', () => {
    console.log('Received SIGINT signal, shutting down server...');
    closeConnections();
});
Salin selepas log masuk

2. Mengendalikan permintaan yang belum selesai
Apabila pelayan web memproses permintaan, ia mungkin melibatkan berbilang operasi, seperti membaca fail, menanyakan pangkalan data, dsb. Jika operasi ini tidak selesai sebelum pelayan ditutup, kehilangan data, gangguan sambungan dan masalah lain mungkin berlaku. Oleh itu, sebelum menutup pelayan, kita perlu memastikan semua operasi selesai. Contohnya, gunakan Janji untuk mengendalikan fail membaca.

const http = require('http');
const fs = require('fs').promises;
const server = http.createServer((req, res) => {
    fs.readFile('./index.html')
        .then((data) => {
            res.end(data);
        })
        .catch((err) => {
            console.error(err);
            res.statusCode = 500;
            res.end('Internal server error');
        });
});
server.listen(3000, () => {
    console.log('Server is running on port 3000');
});

let connections = [];

server.on('connection', (connection) => {
    connections.push(connection);
    connection.on('close', () => {
        const index = connections.indexOf(connection);
        if (index !== -1) {
            connections.splice(index, 1);
        }
    });
});

function closeConnections() {
    console.log('Closing all connections...');
    connections.forEach((connection) => {
        connection.end();
    });
    setTimeout(() => {
        connections.forEach((connection) => {
            connection.destroy();
        });
        server.close(() => {
            console.log('Server has been shut down.');
            process.exit();
        });
    }, 10000);
}

process.on('SIGINT', () => {
    console.log('Received SIGINT signal, shutting down server...');

    // 进行必要的清理工作
    console.log('Cleaning up...');
    fs.unlink('./index.html')
        .then(() => {
            console.log('File has been deleted.');
        })
        .catch((err) => {
            console.error(err);
        });

    // 关闭所有连接
    closeConnections();
});
Salin selepas log masuk

Dalam kod di atas, kami menggunakan Promise untuk membaca fail bagi memastikan fail tersebut telah dipadamkan dengan betul sebelum menutup pelayan. Sebelum menutup pelayan, kami juga menutup semua sambungan dan menutup semua sambungan dan pelayan secara paksa selepas 10 saat. Dalam penggunaan sebenar, tamat masa yang berbeza boleh ditetapkan mengikut keperluan.

3. Ringkasan
Dalam aplikasi Node.js, menutup pelayan web adalah keperluan biasa. Artikel ini menerangkan cara menggunakan modul http terbina dalam untuk mencipta pelayan web dan menutup pelayan dengan baik dengan mendengar isyarat SIGINT. Pada masa yang sama, kami juga memperkenalkan cara mengoptimumkan proses menutup pelayan untuk memastikan pelayan boleh ditutup dengan anggun dalam pelbagai keadaan. Dalam aplikasi sebenar, ia boleh dikembangkan dan dioptimumkan dengan sewajarnya mengikut keperluan untuk memenuhi keperluan yang berbeza.

Atas ialah kandungan terperinci nodejs menutup fungsi pelayan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!