Reza Jashnsaz
5 سال پیش توسط Reza Jashnsaz مطرح شد
5 پاسخ

بجز پروژه های چت دیگه چه پروژه هایی نیازمند nodejs هست

سلام
بجز پروژه هایی که سیستم چت دارن ، دیگه چه پروژه هایی نیازمند nodejs هست ؟
یعنی منظورم اینه با laravel یا asp core یا django اگه پیاده سازی بشن چیز خوبی از اب در نمیاد و حتما نیاز به nodejs هست ؟


ثبت پرسش جدید
mahdi khanzadi
تخصص : backend developer at Snapp mar...
@khanzadimahdi 5 سال پیش مطرح شد
0

حتی پروژه های چت هم نیاز به nodejs ندارن! اجباری در استفاده از nodejs نیست. باید بدونید که بیشتر پروژه های چت رو با Erlang نوشتن. مثلا واتس اپ و چت فیسبوک.

دلیل معروف شدن nodejs این هست که از سینتکس javascript استفاده میکنه وگرنه چیز زیاد خفنی نیست. مهم ترین مشکلش این هست که بدرد پردازش های بالا نمیخوره چون سینگل ترد هست. (single thread)


علی بیات
تخصص : توسعه دهنده ارشد وب
@ali.bayat 5 سال پیش مطرح شد
2

درود

پلتفرم Nodejs در ۲ زمینه به طور کلی عملکرد خوبی از خودش نشون داده.

  • non-blocking I/O: موارد استفاده در اپلیکیشن‌های Real-Time مثل چت و غیره
  • پردازش تعداد بالای درخواست‌ها + پرفرمنس خوب

non-blocking I/O چیست؟

در برخی زبان‌های سمت سرور همچون PHP اجرای اسکریپت‌ها اصطلاحاً به صورت Blocking انجام می‌شود و یکی از چیزهایی که Node.js را نسبت به زبان‌های سمت سروری از این دست متمایز می‌سازد، فیچری تحت عنوان Non-Blocking می‌باشد

I/O چیست؟

پیش از پرداخت به بحث اصلی، باید بدانیم که اساساً منظور از I/O چیست (این اصطلاح به صورت Eye-Oh تلفظ می‌شود.) به طور خلاص، I/O مخفف واژگان Input/Output است و به هرگونه تعامل سیستم با دنیای خارج اشاره دارد که این دنیای بیرون هم عبارت است از دیتای که به عنوان ورودی به سمت سیستم ارسال می‌شوند و یا دیتایی که سیستم آن‌ها را در پاسخ به یک درخواست از دیتابیس فراخوانی کرده و در اختیار سیستم (کاربر) قرار می‌دهد و CPU مرکزی است که تمامی این مسائل را مدیریت می‌کند.

آشنایی با مفهوم Blocking

چنانچه یک زبان برنامه‌نویسی همچون PHP را مد نظر قرار دهیم، Blocking به این مسئله اشاره دارد که اجرای اسکریپت‌ها بدین صورت عملی می‌گردد که یک پروسه باید تکمیل گردد و پس از آنکه سیستم آزاد شد، پروسه (اسکریپت) بعدی امکان اجرا پیدا می‌کند. به طور مثال داریم:

echo time();
echo 'Hello World';

در اسکریپت فوق، ابتدا مقدار بازگشتی تابع ()time نمایش داده می‌شود سپس دستور echo دوم که این وظیفه را دارا است تا اِسترینگ Hello World را چاپ کند، اجرا خواهد شد.

به طور خلاصه، گفته می‌شود که متدهای Blocking به صورت اصطلاحاً Synchronous اجرا می‌شوند در صورتی که متدهای Non-Blocking به صورت Asynchronous اجرا می‌شوند و نیاز به توضیح هم نیست که صفت Synchronous و دارای معانی مختلفی همچون «هم‌گام»، «هم‌زمان» و «هم‌وقت» است و Asynchronous هم معانی مختلفی مثل «ناهم‌گام» یا «غیرهم‌زمان» دارد

حال مثال زیر رو در نظر بگیرید:

const fs = require('fs');
fs.readFile('/file.md', (err, data) => {
  if (err) throw err;
  console.log(data);
});
moreWork(); // will run before console.log

در این مثال که از جنس Asynchronous است ... این امکان را به ما می‌دهد تا در آنِ واحد دو تَسک مختلف اجرا شود، فانکشن ()readFile به صورت Non-Blocking اجرا می‌شود به طوری که امکان اجرای پروسه‌های دیگری را هم داریم و از همین روی جاوااسکریپت می‌تواند اگر خواندن فایل file.md طولانی شد و یا در حین خواندن این فایل اِکسپسنی رخ داد، به سراغ اجرای فانکشن ()moreWork برود و همین فیچر در عین حال ساده منجر شده تا Node.js برای اپلیکیشن‌هایی نیاز به I/O فراوان از یکسو و همچنین سرعت بالای اجرای درخواست‌های کاربران از سوی دیگر دارد به گزینهٔ ایده‌آلی مبدل گردد.

برای درک بهتر این موضوع، سناریویی فرضی را مد نظر قرار می‌دهیم. فرض کنیم هر ریکوئستی که کاربر به سمت سرور ارسال می‌کند، چیزی در حدود ۵۰ میلی‌ثانیه به طول خواهد انجامید تا تکمیل گردد و از این مقدار ۴۵ میلی‌ثانیه مربوط به فراخوانی و یا ثبت دیتا روی دیتابیس است که به شکلی Non-Blocking یا Asynchronous هم می‌توان این تَسک‌ها را انجام داد که در چنین شرایطی، استفاده از این رویکرد مقدار زمان ۴۵ میلی‌ثانیه‌ای را به ازای هر ریکوئست آزاد می‌سازد تا بتوان به عملی کردن ریکوئست‌های دیگر پرداخت و این یعنی ایجاد یک تجربهٔ کاربری فوق‌العاده خوب برای کاربرانی که دغدغهٔ سرعت بالا دارند.

موفق باشید


Reza Jashnsaz
تخصص : مهندس نرم افزار
@rezajashnsaz0011 5 سال پیش مطرح شد
0

@khanzadimahdi
حالا فیسبوک و واتساپ نه ، ولی اکثر سیستمایی که داخلشون چت هست از سوکت پروگرمینگ node.js استفاده کردن دیگه
سوکت نویسی با بقیه زبانها یا فریمورکا کار خیلی سخت و غیرعاقلانه ای هست


Alimotreb
تخصص : کانفیگ سرور و برنامه نویس
@Alimotreb 5 سال پیش مطرح شد
1

سلام
@rezajashnsaz0011

به دلیل سرعت بالا پردازش ، اکثرا از سوکت در نود جی اس استفاده میکنن
میتونم بگم بالا 70 درصد!


عرفان همتی
تخصص : Backend Developer
@erfanhemmati 5 سال پیش مطرح شد
0

@rezajashnsaz0011
از یکی از دوستان nodejs کار شنیدم که ظاهرا تلگرام هم با node پیاده سازی شده


برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام