Nodejs چیست ؟ و یک مثال ساده

NodeJS چیه ؟

NodeJS یک فریم ورک سمت سرور بر پایه زبان جاوا اسکرپیت می باشد.

به چه دردی می خوره ؟

برای مثال شما برنامه های تحت سرور رو با PHP می نویسید، اما الان می تونید همان برنامه ها را با JavaScript بنویسید.

فرقشون چیه ؟

مفصر PHP برای اجرای کدهای شما خط به خط شروع به خواندن کد می کنه و تا زمانی که تحلیل روی آن خط تمام نشود به خط بعدی منتقل نمی شود، اما NodeJS تمامی خط های کد شما را تقریبن همزمان اجرا می کند و بدین ترتیب سرعت اجرای کدهای سمت سرور شما با سرعت غیر قابل تصوری افزایش پیدا می کند به این روش non-blocking گفته می شود.

قاطی نمی کنه ؟

در این حالت شما دستور رو برای CPU ارسال می کنید و CPU شروع به Process می کنه و زمانی که پردازش تمام می شود نتیجه را توسط یک CallBack برای شما ارسال می کند و شما با توجه به نتیجه بازگشتی بقیه کدها را می نویسید، در این حین کد های دیگر که ارتباطی به کد های ارسال شده ندارد اجرا می شوند.

در واقع ترتیب اجرا شدن کد ها را شما برای برنامه معین می کنید.

نکته مهم بعدی اینه که در حالت عادی در برنامه های سمت سرور کنونی تا زمانی که شما یک درخواست رو برای سرور ارسال نکنید، سرور هیچ جوابی نمی تونه برای شما ارسال کنه و در واقع سرور به کلاینت دسترسی مستقیم نداره و یک ارتباط یکطرفه برقرار میشه.

مشکلش چیه ؟

مثلاً فکر کنید می خواهیم یک برنامه چت رو بنویسیم، وقتی ما یک پیغام را تایپ می کنیم، با فشردن دکمه Enter متن ما برای سرور ارسال می شه، اما وقتی طرف مقابل ما برای ما یک پیغام را تایپ می کنه سیستم ما متوجه نمی شه که از طرف مقابل پیغامی ارسال شده، یکی از راه های کاظم آبادی اینه که ما یه تایمر بذاریم و هر چند ثانیه چک کنیم که پیغام جدید ارسال شده یا نه. (یاد احسان به خیر !)

حالا فکرش رو بکنید که ۱۰۰ نفر همزمان با هم بخوان چت کنن و در هر ثانیه چندیدن درخواست به سرور ارسال می شود که اطلاعات را برای ما بفرسته، در نتیجه بار سنگینی به سرور تحمیل می شه و دیگه لازم نیست کسی سرور شما رو هک کنه، شما خودتون زحمت Down کردن سرور رو کشیدید !!!

NodeJS می تونه کاری انجام بده که این ارتباط به صورت دو طرفه برقرار بشه، یعنی اینکه سرور هر موقع خواست برای شما دیتا ارسال کنه، حالا چه اتفاقی می افته ؟

به محض اینکه شخص مقابل شما یک پیغام برای شما تایپ می کنه، این پیغام برای شما پدیدار می شود !

حالا چرا تایمر سیستم رو منفجر می کنه ولی NodeJS فشاری نمیاره ؟

شما در Node یک پورت را باز نگه می دارید و پورت رو به اصطلاح گوش می دهید و هر دیتایی که روی پورت مورد نظر ارسال بشه شما روی آن پردازش انجام می دهید، پس دیگه نیازی نیست پشت سره هم به سرور درخواست ارسال کنید.

خوب مقدمه چینی برای NodeJS تا همین جا کافیه.

NodeJS چطوری نصب می شود ؟

شما می تونید به سایت Nodejs.ir سر بزنید و آخرین ورژن NodeJS رو با توجه به سیستم عامل خودتون دانلود و نصب کنید، با توجه به اینکه من بشخصه ویندوز رو دوست دارم، نصب در سیستم عامل ویندوز رو توضیح می دم و لینوکس دردسر زیاد داره !

خوب بعد از دانلود، برنامه رو نصب کنید.

تموم شد، نصب شد !

چطور از NodeJS استفاده کنیم ؟

با اجرای دستور cmd در run محیط Command Prompt را اجرا کنید، دستور node  را تایپ کنید و Enter کنید :

node

این هم از این، node اجرا شد !

چطور تست کنیم که NodeJS کار می کنه یا نه ؟

بعد از وارد کردن عبارت node و فشردن Enter شما به یک خط پائین تر هدایت شدید و یک سطر خالی برای شما محیا شد،

حالا وارد کنید ۲+۳ و مجدد Enter کنید :

۲+۳

نتیجه ای که بعد از این دستور مشاهده می کنید عدد ۵ می باشد ! حتی می تونید یک function وارد کنید، بعد از وارد کردن کاراکتر ; برنامه خود به خود متوجه می شود که function به پایان رسیده است و می توانید از آن استفاده کنید ولی این روش رو اصن پیشنهاد نمی کنم !

حالا cmd یا همون Command Prompt رو ببندید.

بیاید این تست رو یکمی پیشرفته تر کنیم، در درایو C یک فایل به نام test.js ایجاد کنید و درون این فایل بنویسید :

console.log('Hi !');

این دستور یعنی در کنسول عبارت Hi چاپ شود، فایل را ذخیره کنید و خارج شوید.

یک بار دیگه عبارت cmd در محیط run اجرا کنید. توسط دستور زیر به درایو c هدایت شوید :

cd/

حالا عبارت زیر را وارد کنید تا توسط برنامه NodeJS فایل test.js اجرا کنید :
node test.js
می بینید که عبارت Hi ! در کنسول نمایش داده شده است !
شما یک برنامه ساده NodeJS نوشتید و آنرا را اجرا کردید.
سعی کردم در این متن به ساده ترین حالتی که می تونستم توضیح بدم. کم کم می ریم به سمت اینکه یک برنامه به نسبت حرفه ای رو بنویسیم.

شی گرایی در جاوا اسکریپت قسمت ۱

دوستانی که من رو می شناسند می دونند که من با خیلی از زبان های برنامه نویسی معروف دنیا آشنایی مقدماتی دارم، می شه گفت اکثراً رو یه تستی زدم !  ولی تنها زبانی که من رو مجذوب خودش کرد جاوا اسکرپیت بود.

فکر می کنم در ایران هم تب جاوا اسکریپت با آشنا شدن مردم با jQuery داغ شد، همه به یک تکنولوژی دسترسی پیدا کردیم که ما رو از شر کدهای نامفهوم و طولانی رها می کرد و با توابعی مانند animate، fadeIn، fadeOut، show، hide و … لذت کدنویسی رو با زیبایی خیره کننده خروجی که به ما می داد دو چندان می کرد.

PHP کارها که JavaScript کامل با کدشون sync هست، Net. کار ها هم که از شر  Update Panel راحت شدن ! سرعت کلاینت پروژه هاشون هم که ۱۰۰ برابر شده بود و دستشون هم توی طراحی هایی شبیه به PHP باز تر شد. همه با هم حالشو بردیم.

خب بگذریم، یکمی بحث رو تخصصی می کنم،

جاوا اسکرپیت یک زبان شی گرا نیست بلکه یک زبان مبتنی بر شی می باشد.

در جاوا اسکریپت سـه نوع دسته بندی برای Object ها دیده شده است، اشیا محلی، اشیا میزبان و اشیائی که کاربر تعیین می کند.

اشیا محلی :

یا Native Object ها توسط زبان JavaScript عرضه شده اند،

مانند : String, Number, Array, Image, Date, Math و …

اشیا میزبان :

یا Host Object ها توسط مرورگر به جاوا اسکرپیت عرضه می شود،

مانند : window, document و …

اشیا تعریف شده توسط کاربر :

یا User-Defined ها اشیایی هستند که برنامه نویسان آنها را تعریف می کنند.

هدف من از معرفی کردن اشیا اینه که کار رو از جای سخت به جای آسون ببرم، می خوام از Prototype شروع کنم و به تعریف متغیر برسم ! پس اگر حرفه ای نیستید خیلی عجله نکنید هر چه که می گذره بحث ها آسون تر خواهد شد !

تا اینجا همین قدر کافیه، موفق باشید.

دسکتاپِ سی بلاگ تعطیل شد !

اولین مطلبی که می تونم بگم اینه که بعد از دو ماه فکر کردن به این نتیجه رسیدم که cblog رو از یک دسکتاپ اینترنتی به یک بلاگ تغییر شکل بدم، امیدوارم سی بلاگ تو این مدت که بالا بود (حدود ۳ سال) تونسته باشه نیازهای دوستایی که قصد داشتن جاوا اسکرپیت رو تجربه کنن نمونه کار و منبع خوبی بوده باشه.

اگه الان به این دامین اومدید که سی بلاگ رو ببینید نگران نباشید، در چند روز آینده سورس کامل رو برای دانلود می ذارم که راحت بتونید روی سیستم خونه کدهاش رو ببینید.

دوستایی هم که به دنبال OFF1 و OFF2 به اینجا اومدن ازشون عذر خواهی می کنم. بعد از تغییر سیستم سایت به وردپرس و MVC بودن این سیستم بنده یه خورده محدود شدم و علاقه ای هم ندارم که اپلیکشن دیگه ای کنار وردپرس ران بشه. پس معذرت خواهی بنده رو بپذیرید.