سلام
بجز پروژه هایی که سیستم چت دارن ، دیگه چه پروژه هایی نیازمند nodejs هست ؟
یعنی منظورم اینه با laravel یا asp core یا django اگه پیاده سازی بشن چیز خوبی از اب در نمیاد و حتما نیاز به nodejs هست ؟
حتی پروژه های چت هم نیاز به nodejs ندارن! اجباری در استفاده از nodejs نیست. باید بدونید که بیشتر پروژه های چت رو با Erlang نوشتن. مثلا واتس اپ و چت فیسبوک.
دلیل معروف شدن nodejs این هست که از سینتکس javascript استفاده میکنه وگرنه چیز زیاد خفنی نیست. مهم ترین مشکلش این هست که بدرد پردازش های بالا نمیخوره چون سینگل ترد هست. (single thread)
درود
پلتفرم Nodejs در ۲ زمینه به طور کلی عملکرد خوبی از خودش نشون داده.
در برخی زبانهای سمت سرور همچون PHP اجرای اسکریپتها اصطلاحاً به صورت Blocking انجام میشود و یکی از چیزهایی که Node.js را نسبت به زبانهای سمت سروری از این دست متمایز میسازد، فیچری تحت عنوان Non-Blocking میباشد
پیش از پرداخت به بحث اصلی، باید بدانیم که اساساً منظور از I/O چیست (این اصطلاح به صورت Eye-Oh تلفظ میشود.) به طور خلاص، I/O مخفف واژگان Input/Output است و به هرگونه تعامل سیستم با دنیای خارج اشاره دارد که این دنیای بیرون هم عبارت است از دیتای که به عنوان ورودی به سمت سیستم ارسال میشوند و یا دیتایی که سیستم آنها را در پاسخ به یک درخواست از دیتابیس فراخوانی کرده و در اختیار سیستم (کاربر) قرار میدهد و CPU مرکزی است که تمامی این مسائل را مدیریت میکند.
چنانچه یک زبان برنامهنویسی همچون 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 هم میتوان این تَسکها را انجام داد که در چنین شرایطی، استفاده از این رویکرد مقدار زمان ۴۵ میلیثانیهای را به ازای هر ریکوئست آزاد میسازد تا بتوان به عملی کردن ریکوئستهای دیگر پرداخت و این یعنی ایجاد یک تجربهٔ کاربری فوقالعاده خوب برای کاربرانی که دغدغهٔ سرعت بالا دارند.
موفق باشید
@khanzadimahdi
حالا فیسبوک و واتساپ نه ، ولی اکثر سیستمایی که داخلشون چت هست از سوکت پروگرمینگ node.js استفاده کردن دیگه
سوکت نویسی با بقیه زبانها یا فریمورکا کار خیلی سخت و غیرعاقلانه ای هست
سلام
@rezajashnsaz0011
به دلیل سرعت بالا پردازش ، اکثرا از سوکت در نود جی اس استفاده میکنن
میتونم بگم بالا 70 درصد!
@rezajashnsaz0011
از یکی از دوستان nodejs کار شنیدم که ظاهرا تلگرام هم با node پیاده سازی شده
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟