Jawaban lain benar-benar gila karena Anda dapat membaca di dokumen Node sendiri di http://nodejs.org/docs/latest/api/process.html#process_event_uncaughtexception
Jika seseorang menggunakan jawaban lain, baca Node Docs:
Perhatikan bahwa uncaughtException
ini adalah mekanisme yang sangat kasar untuk penanganan pengecualian dan dapat dihapus di masa depan
PM2
Pertama-tama, saya sangat merekomendasikan PM2
untuk menginstal Node.js
. PM2 sangat hebat dalam menangani crash dan memonitor aplikasi Node serta load balancing. PM2 segera memulai aplikasi Node setiap kali crash, berhenti karena alasan apa pun atau bahkan ketika server restart. Jadi, jika suatu hari bahkan setelah mengelola kode kami, aplikasi macet, PM2 dapat segera memulai kembali. Untuk info lebih lanjut, Menginstal dan Menjalankan PM2
Sekarang kembali ke solusi kami untuk mencegah aplikasi itu sendiri crash.
Jadi setelah melewati akhirnya saya menemukan apa yang disarankan oleh Node document:
Jangan gunakan uncaughtException
, gunakan domains
dengan cluster
sebagai gantinya. Jika Anda menggunakannya uncaughtException
, mulai ulang aplikasi Anda setelah setiap pengecualian yang tidak tertangani!
DOMAIN dengan Cluster
Apa yang sebenarnya kita lakukan adalah mengirim respons kesalahan ke permintaan yang memicu kesalahan, sambil membiarkan yang lain selesai dalam waktu normal mereka, dan berhenti mendengarkan permintaan baru pada pekerja itu.
Dengan cara ini, penggunaan domain berjalan seiring dengan modul gugus, karena proses master dapat memotong seorang pekerja baru ketika seorang pekerja menemukan kesalahan. Lihat kode di bawah ini untuk memahami apa yang saya maksud
Dengan menggunakan Domain
, dan ketahanan memisahkan program kami menjadi beberapa proses pekerja menggunakan Cluster
, kami dapat bereaksi lebih tepat, dan menangani kesalahan dengan keamanan yang jauh lebih besar.
var cluster = require('cluster');
var PORT = +process.env.PORT || 1337;
if(cluster.isMaster)
{
cluster.fork();
cluster.fork();
cluster.on('disconnect', function(worker)
{
console.error('disconnect!');
cluster.fork();
});
}
else
{
var domain = require('domain');
var server = require('http').createServer(function(req, res)
{
var d = domain.create();
d.on('error', function(er)
{
//something unexpected occurred
console.error('error', er.stack);
try
{
//make sure we close down within 30 seconds
var killtimer = setTimeout(function()
{
process.exit(1);
}, 30000);
// But don't keep the process open just for that!
killtimer.unref();
//stop taking new requests.
server.close();
//Let the master know we're dead. This will trigger a
//'disconnect' in the cluster master, and then it will fork
//a new worker.
cluster.worker.disconnect();
//send an error to the request that triggered the problem
res.statusCode = 500;
res.setHeader('content-type', 'text/plain');
res.end('Oops, there was a problem!\n');
}
catch (er2)
{
//oh well, not much we can do at this point.
console.error('Error sending 500!', er2.stack);
}
});
//Because req and res were created before this domain existed,
//we need to explicitly add them.
d.add(req);
d.add(res);
//Now run the handler function in the domain.
d.run(function()
{
//You'd put your fancy application logic here.
handleRequest(req, res);
});
});
server.listen(PORT);
}
Meskipun Domain
sedang menunggu penghentian dan akan dihapus sebagai pengganti baru datang seperti yang dinyatakan dalam Dokumentasi Node
Modul ini sedang menunggu penghentian. Setelah API pengganti diselesaikan, modul ini akan sepenuhnya tidak digunakan lagi. Pengguna yang benar-benar harus memiliki fungsionalitas yang disediakan domain dapat mengandalkannya untuk saat ini tetapi harus berharap harus bermigrasi ke solusi yang berbeda di masa mendatang.
Tetapi sampai penggantian baru tidak diperkenalkan, Domain dengan Cluster adalah satu-satunya solusi yang bagus seperti yang disarankan oleh Node Documentation.
Untuk memahami Domain
dan Cluster
membaca secara mendalam
https://nodejs.org/api/domain.html#domain_domain (Stability: 0 - Deprecated
)
https://nodejs.org/api/cluster.html
Terima kasih kepada @Stanley Luo karena telah membagikan kepada kami penjelasan mendalam yang luar biasa tentang Cluster dan Domains ini
Cluster & Domains