Rumah hujung hadapan web Soal Jawab bahagian hadapan nodejs menutup fungsi pelayan

nodejs menutup fungsi pelayan

May 13, 2023 pm 08:07 PM

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!

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

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Apa itu useeffect? Bagaimana anda menggunakannya untuk melakukan kesan sampingan? Apa itu useeffect? Bagaimana anda menggunakannya untuk melakukan kesan sampingan? Mar 19, 2025 pm 03:58 PM

Artikel ini membincangkan useeffect dalam React, cangkuk untuk menguruskan kesan sampingan seperti pengambilan data dan manipulasi DOM dalam komponen berfungsi. Ia menerangkan penggunaan, kesan sampingan yang biasa, dan pembersihan untuk mencegah masalah seperti kebocoran memori.

Terangkan konsep pemuatan malas. Terangkan konsep pemuatan malas. Mar 13, 2025 pm 07:47 PM

Lazy memuatkan kelewatan memuatkan kandungan sehingga diperlukan, meningkatkan prestasi web dan pengalaman pengguna dengan mengurangkan masa beban awal dan beban pelayan.

Apakah fungsi pesanan yang lebih tinggi dalam JavaScript, dan bagaimana mereka boleh digunakan untuk menulis lebih banyak kod ringkas dan boleh diguna semula? Apakah fungsi pesanan yang lebih tinggi dalam JavaScript, dan bagaimana mereka boleh digunakan untuk menulis lebih banyak kod ringkas dan boleh diguna semula? Mar 18, 2025 pm 01:44 PM

Fungsi pesanan yang lebih tinggi dalam JavaScript meningkatkan ketabahan kod, kebolehgunaan semula, modulariti, dan prestasi melalui abstraksi, corak umum, dan teknik pengoptimuman.

Bagaimanakah kari bekerja di JavaScript, dan apakah faedahnya? Bagaimanakah kari bekerja di JavaScript, dan apakah faedahnya? Mar 18, 2025 pm 01:45 PM

Artikel ini membincangkan kari dalam JavaScript, teknik yang mengubah fungsi multi-argumen ke dalam urutan fungsi argumen tunggal. Ia meneroka pelaksanaan kari, faedah seperti aplikasi separa, dan kegunaan praktikal, meningkatkan kod baca

Bagaimanakah algoritma Rekonsiliasi React berfungsi? Bagaimanakah algoritma Rekonsiliasi React berfungsi? Mar 18, 2025 pm 01:58 PM

Artikel ini menerangkan algoritma perdamaian React, yang dengan cekap mengemas kini DOM dengan membandingkan pokok DOM maya. Ia membincangkan manfaat prestasi, teknik pengoptimuman, dan kesan terhadap pengalaman pengguna. Kira -kira: 159

Apakah useContext? Bagaimana anda menggunakannya untuk berkongsi keadaan antara komponen? Apakah useContext? Bagaimana anda menggunakannya untuk berkongsi keadaan antara komponen? Mar 19, 2025 pm 03:59 PM

Artikel ini menerangkan USEContext dalam React, yang memudahkan pengurusan negara dengan mengelakkan penggerudian prop. Ia membincangkan faedah seperti keadaan terpusat dan penambahbaikan prestasi melalui pengurangan semula yang dikurangkan.

Bagaimana anda menyambungkan komponen React ke kedai Redux menggunakan Connect ()? Bagaimana anda menyambungkan komponen React ke kedai Redux menggunakan Connect ()? Mar 21, 2025 pm 06:23 PM

Artikel membincangkan penyambungan komponen reaksi ke kedai redux menggunakan Connect (), menerangkan MapStateToprops, MapdispatchToprops, dan kesan prestasi.

Bagaimana anda mengelakkan tingkah laku lalai di pengendali acara? Bagaimana anda mengelakkan tingkah laku lalai di pengendali acara? Mar 19, 2025 pm 04:10 PM

Artikel membincangkan menghalang tingkah laku lalai dalam pengendali acara menggunakan kaedah pencegahanDefault (), faedahnya seperti pengalaman pengguna yang dipertingkatkan, dan isu -isu yang berpotensi seperti kebimbangan aksesibiliti.

See all articles