41
تشکر

Node.js چیست؟ بخش دوم

Node.js

Node.js

در بخش اول این مطلب اطلاعاتی را در مورد Node.js کسب کردیم. در این مطلب سعی میکنیم بخش چیستی Node.js را به پایان ببریم.

برنامه نویسی رویداد گرا

بسیاری از برنامه نویسان مدل شی گرایی را بهترین مدل برنامه نویسی میدانند به صورتی که به هیچ چیز دیگری احتیاج نیست. اما Node از مدل برنامه نویسی رویدادگرا استفاده و پشتیبانی میکند.

برای مثال کد جی کوئری زیر را میبینید که با استفاده از مدل رویدادگرا نوشته میشود. زمانی که یک دکمه فشار داده شود (رویداد) کد زیر اجرا میشود.

$("#myButton").click(function(){
     if ($("#myTextField").val() != $(this).val())
         alert("Field must match button text");
});

سمت سرور هم تفاوت چندانی با سمت کلاینت ندارد. درست است, هیچ دکمه ای فشار داده نمیشود یا هیچ تکست باکسی پر نمیشود اما در یک مرحله بالاتر رویدادها در حال وقوع هستند. یک کانکشن ساخته میشود (رویداد), اطلاعات از کانکشن دریافت میشود (رویداد), دریافت اطلاعات از کانکشن به پایان میرسد (رویداد).

اما چرا این مدل برای Node خوب است؟ جاوا اسکریپت بهترین زبان برای مدل رویدادگرا است زیرا اجازه تعریف توابع بدون نام و غیر فعال در زمانی خاص و مهمتر از همه سینتکس (Syntax) این زبان برای هر کسی که با کد سر و کار داشته باشد آشنا است.

بهترین نکته در جاوا اسکریپت توابع برگشتی (callback) هستند. توابع callback زمانی فراخوانی میشوند که یک رویداد اتفاق بیافتد. تنها کاری که باید کرد این است که به رویداد ها گوش دهیم و توابع مورد نظر را بنویسیم. هیچ پیچیدگی مانند مدل شی گرایی ندارد.

مثالی از یک برنامه Node

سرانجام زمان آن رسیده که کدی از برنامه های Node را ببینیم. فهمیدیم که Node برای گرفتن برنامه های با ترافیک بالا مناسب است. خب اجازه دهید یک اپلیکیشن خیلی ساده وب ولی با بیشترین سرعت را بسازیم. این برنامه یک ورودی میگیرد که به آن number میگوییم و با استفاده از این ورودی یک عدد تصادفی بین صفر و number به عنوان خروجی میدهد. این برنامه میتواند تا 50,000 درخواست همزمان را پاسخ دهد. بیاید نگاهی به کد بیاندازیم:

var http = require("http");
var url = require("url");

http.createServer(function(request, response) {
  
  response.writeHead(200, {"Content-Type": "text/plain"});
  
  var params = url.parse(request.url, true).query;
  var input = params.number;
  
  var numInput = new Number(input);
  var numOutput = new Number(Math.random() * numInput).toFixed(0);
  
  response.write(numOutput);
  
  response.end();
  
}).listen(80);

console.log("Random Number Generator Running...");

در خط اول و دوم ماژول هایی که برای کارمان لازم است را فراخوانی کردیم. مانند دستور include در زبان های دیگر.

خط چهارم مهمترین قسمت هر فایل Node است. پردازش اصلی در این تابع اتفاق می افتد. خط های بعدی دریافت number از ورودی و تولید خروجی است.

نکات قابل توجه این است که ورودی را از طریق آدرسی مانند (http://localhost/?number=27) دریافت میکنیم. همچنین دستور console.log برای نمایش پیغام در console سرور است نه کلاینت.

برای اجرای کد بالا ابتدا به سایت nodejs.org بروید و سپس نسخه مورد نظر سیستم عامل خود را نصب کنید. پس از نصب, کدهای بالا را درون یک فایل به نام random.js ذخیره کنید. (در این مثال سیستم عامل ویندوز مد نظر است, اما در عمل هیج فرقی نمیکند). سپس CMD ویندوز یا Terminal لینوکس را باز کرده. ابتدا مسیر جاری را به همان جایی که فایل را گذاشته اید تغییر دهید.

cd c:/

سپس فایل random.js را با استفاده از دستور node اجرا کنید.

node random.js

خروجی مانند زیر خواهد بود.

Node.js

Node.js

خب حالا برنامه آماده اجرا شدن است. میبیند!! برنامه به پورت 80 گوش میدهد و تا زمانی که فراخوانی نشود اجرا نمیشود. برای اجرا کردن برنامه مروگر خود را باز کرده آدرس http://localhost/?number=27 را باز کنید. مشاهده میکنید که هر بار که صفحه را reload میکنید عدد جدیدی نمایش داده میشود.

Node.js

Node.js

نکته مهم در اجرا کردن این برنامه این است که باید پورت 80 توسط برنامه دیگری مانند wamp اشغال نشده باشد.

Node تمام کارهایی را که Apache انجام میدهد را میتواند انجام دهد البته با استفاده از ماژول های نوشته شده. بهتر است اگر اپلیکیشنی در حال ساخت دارید که به تعداد اتصالات بسیار نیاز دارد نگاهی هم به Node داشته باشید.

مطالب مرتبط

Node.js چیست؟ بخش اول

  • بافندکار می‌گه:

    ممنون
    خسته نباشید !

  • ahmad می‌گه:

    سلام ، برنامه ای دارم که در هر ثانیه اطلاعاتی رو از بانک اطلاعاتی میخونه فکر میکنید بجای استفاده از php از node.js استفاده کنم؟
    یا اینکه این تنها به سرعت mysql مرتبط میشه؟
    تو پرانتز : اطلاعات سخت افزاری رو در هر دو حالت یک میزان در نظر بگیریم.
    ممنونم.

  • meysam می‌گه:

    آموزشت عالی بود. ممنون

  • elyas می‌گه:

    برای کار با node.js با IDE webstorm میشه راحت کار کرد و کارکرد خوبی داره و تمام ماژول های مورد نیاز رو به راحتی میشه اضافه کرد

  • سمیه می‌گه:

    سلامی دوباره
    آقا محسن اگه براتون مقدوره درباره مباحث زیر توی سایتتون مطالب بزارید

    ارسال داده ها (متن و فایل و … ) از کلاینت به سرور
    بررسی امنیت داده ها و امن کردن آنها برای درج در دریتابیس و یا ذخیره فایلهای آپلودی
    وصل شدن به دیتابیس ها (مخصوصا mysql )

    با تشکر

  • سمیه می‌گه:

    چند روزی میشه که این Nodejs ذهن منو مشغول کرده ولی متاسفانه منابع فارسی چندانی در این زمینه نمیشه یافت و از طرفی زبان انگلیسی من زیاد جالب نیست که دنبال منابع اصلی برم

    من مراحل گفته شده رو انجام داده برنامه مزبور رو دانلود و نصب کردم و تست کردم جواب هم گرفتم

    میخواستم یک بخش از سایتم رو به اینصورت طراحی کنم ولی اطلاعات زیادی در این ضمینه نتونستم پیدا کنم

    اگر برای شما امکانش هست درباره مواردی چون ( وصل شدن به دیتابیس mysql و امنیت داده های دریافتی و ارسالی و کنترل برنامه و چیزهایی که در حالت عادی با php برای یک سایت پیاده سازی میشه ) مطالب بزارید توی سایت ممنون میشم

  • basoh می‌گه:

    مسیر زیر رو دنبال کنید.

    Start ->All Programs->Node.js->Node.js Command prompt

    حالا دستور node random.js رو اجرا کنید.

    ودرآخر آدرس زیر رو تو مرورگر باز کنید.

    http://localhost/?number=27

  • hossein می‌گه:

    C:\>node random.js
    Random Number Generator Running…

    events.js:72
    throw er; // Unhandled ‘error’ event
    ^
    Error: listen EADDRINUSE
    at errnoException (net.js:901:11)
    at Server._listen2 (net.js:1039:14)
    at listen (net.js:1061:10)
    at Server.listen (net.js:1127:5)
    at Object. (C:\random.js:18:4)
    at Module._compile (module.js:456:26)
    at Object.Module._extensions..js (module.js:474:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Function.Module.runMain (module.js:497:10)

    • Morteza می‌گه:

      سلام، این مشکل زمانی پیش میاد که پرت تداخل داشته باشه
      به احتمال زیاد شما برنامه xampp یا wamp دارید که پرت 80 رو پر کرده
      پرت کدتون رو به 8080 یا هر پرت باز دیگه تغییر بدید.
      listen(80); رو برای مثال به listen(8080); تغییر بدید

  • hossein می‌گه:

    سلام دوست عزیز من آدرس برنامه xampp اینجاس :
    F:\xampp\htdocs

    برنامه nodejs رو نصب کردم خودش تو درایو C نصب کرد
    و این کارایی که شما گفتیو انجام میدم ولی اررور میده ؟ چطور شما localhost اجرا میکنی ولی random.js تو یک مسیر دیگه قرار گرفته ممنون میشم راهنمایی کنید در مورد نحوه استفاده
    مرسی

    • محسن شفیعی می‌گه:

      سلام، در واقع وقتی شما دستور node FileName رو درون CMD ویندوز تایپ میکنید. خود اون فایل تبدیل به localhost میشه، حالا آدرسش هر جا میخواد باشه. البته میشه اسم فایل رو هم نوشت.
      مطابق راهنما عمل کنید میتونید انجام بدید.


  • نظرات این مطلب بسته است.