Fork me on GitHub

معرفی forever

فرض کنید برنامه ای با node نوشته‌اید و آن را به سرور خود منتقل کرده و از طریق ssh با دستور node myscript.js آن را اجرا کرده‌اید. بعد از چند دقیقه برنامه شما از کار می‌افتد در صورتی که مطمئن هستید خطایی در آن نیست. این مشکل اول!

وقتی که به زبان PHP یا Ruby یا زبان‌هایی از این دست برنامه‌ای می نویسیم، برای اجرای آن از وب سرورهایی نظیر apache یا nginx استفاده می کنیم: با هر درخواست، وب سرور اسکریپت برنامه را اجرا می کند و پاسخ را به کاربر می فرستد. اما در node برنامه ها مستقل عمل می کنند. به عنوان مثال وقتی در node از ماژول http استفاده می کنیم هیچ نیازی به وب سرور نداریم. حال فرض کنید برنامه در حال پاسخ به یک درخواست به خطای شکار نشده ( یعنی همون catch نشده :دی ) برخورد کند.

در حالتی که از وب سرورها برای اجرای اسکریپتها استفاده می‌شود ( مثل PHP ) تنها کاربری که با خطا مواجه می‌شود آن کسی است که درخواست را ارسال نموده و دیگر کاربران چون به این حالت خطا نرسیده اند بدون مشکل با برنامه در تعامل خواهند بود. اما در حالتی که از node استفاده کنیم بروز یک خطای catch نشده کل process را از کار می اندازد و به عبارتی برنامه crash می کند. بنابراین تا زمانی که برنامه دوباره راه اندازی نشود کسی قادر به استفاده از آن نیست. این هم مشکل دوم!