• 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
استفاده ترکیبی از nodejs و php
#1
سلام
پروژه ای اخیرا به من محول شده که سینک و ارتباطات ایجکس بسیاری بین کاربر و سرور بوجود خواهد آمد. به عنوان مثال: بازی آنلاین
بدلیل افزایش ارتباطات ایجکس ، سربار سرور با کلاینت های همزمان زیاد به شدت افزایش خواهد یافت به همین دلیل به فکر این افتادم که از nodejs در سرور بهره ببرم. و برای همین از اهل فن که مطالعات زیادی در این زمینه داشتند چند سوال دارم:
  1. آیا می شود در سمت سرور از کدهای php بهره برد؟
  2. آیا ادغام php و nodejs در سرور همان مشکل multithreading را بوجود نمی آورد؟
  3. سرور چگونه کلاینت ها را در حالت sleep یا انتظار قرار می دهد؟
  4. آیا در همه مرورگرهای جدید قابل پیاده سازی است؟
با تشکر
  پاسخ
تشکر شده توسط :
#2
از اونجایی که سوالاتتون نادقیقیه من هم جواب های خوبی بهت نمی تونم بدم جز اینکه به چند توضیح کلی بسنده کنم.
1-چرا نشود چه ربطی داشت اصلاً؟
2-بستگی دارد شما می خواین چه کار بکنین و اصلاً منظورتون از ادغام چی هست. در چنین مواردی برخی از وظیفه ها که نیازمند پردازش موازی یا پردازش های سریع و سنگین هست را nodejs انجام می ده و حالا بعضا خروجی هم در دیتابیس ذخیره می شه و این دیگه ارتباطی با php نداره نمی دونم چی تو ذهنت هست ولی این استفاده همزمان یا ارتباط این دو تا کلا معنی خاصی برا من نداره سوالت گنگه.
3-کار مشکلی نیست این یک شروع خوبه که از وب ساکت استفاده می کنه http://nodejs.ir/blog/nowjs-tutorial
4-بله اکثر مرورگرهای جدید از HTML5 پشتیبانی می کنن و شما در این زمینه اگه محدودیتی برای مرورگرهای جدید و قدیمی نداشته باشین مشکلی نخواهید داشت.


در کل من تجربه توسعه بازی داشتم اگه دنبال توسعه بازی هستین خیلی نیازی به NODEJS نیست بیشتر فشار بر روی دیتابیس هست که تفاوت زیادی نداره شما با PHP کار کنین یا Node برای همین بهتره تمرکز را جای دیگه ای بذارین اگه هم اون یه مثال بود فقط که هیچ
  پاسخ
تشکر شده توسط : admin oia ali786 payam
#3
دوست عزیز وقتی مثلا 100 کاربر بصورت همزمان به سرور درخواست می فرستن، nodejs خیلی خیلی کارآمد میشه
  پاسخ
تشکر شده توسط :
#4
(۱۳۹۱ مهر ۰۱, ۰۵:۳۵ ب.ظ)nasserghiasi نوشته: دوست عزیز وقتی مثلا 100 کاربر بصورت همزمان به سرور درخواست می فرستن، nodejs خیلی خیلی کارآمد میشه

بهتره به جای اینکار همون محصول رو روی php بهینه کنید بهتر جواب می گیرید.
پیشنهادهای من
۱- به php 5.4 به روزرسانی کنید
۲- از nginx استفاده کنید
۳- php-fpm استفاده کنید
۴- پروفایلینگ راه بندازید و گلوگاه‌های بهینه رو روی سیستم پیدا کنید.
منم دیروز یه همچین مشکلی رو داشتم سر سنگین بودن درخواست درخواستها حتی تا ۲ ثانیه هم میرفت. الان برای کاربر در مدت ۲۰۰ میلی ثانیه سرور پاسخ میده و لود به شدت اومده پایین.
اصلا این ادغام رو انجام ندید. من خودم فقط توی یک حالت اونم web socket که می خواستم از socket.io استفاده کنم این ادغام رو انجام دادم و اونجا بحث امکانات بود تا بهینگی.
اما بازم اگر می خوایید رفتاری مثل Nodejs یا java که به صورت یک ماشین مجازی سرور رو بیارید بالا از hhvm استفاده کنید. البته دردسرهای خاص خودش رو داره
https://github.com/facebook/hiphop-php/w...untu-12.04
  پاسخ
تشکر شده توسط : Reza zoghal oia ali786 vejmad
#5
https://github.com/facebook/hiphop-php/w...ing-HipHop
  پاسخ
تشکر شده توسط :
#6
چرا این ادغام رو انجام ندم؟
من فقط می خوام بخشی از پروژه که درخواست های ایجکس شاملش می شه رو با nodejs پیاده سازی کنم تا بار سرور بیاد پایین. شما فکر می کنید php,apache چقدر می تونه در این زمینه بهینه بشه؟
فرض کنید 1000 کاربر همزمان لاگین هستند و هر کدومشون هر 2 یا 3 ثانیه حدود 2 تا 5 درخواست ترکیبی (یعنی چند درخواست رو تو یه درخواست قرار بدیم) sync به سرور می فرستند. ببینید چه اتفاقی می افته. میشه 5000 thread
اینم بگو که تعداد درخواست ها به نسبت فازبندی و توسعه برنامه بیشتر هم می شن. مثلا درخواستی خواهد بود که هر 20 ثانیه اجرا میشه ولی مثلا یک درخواست باید هر 2 ثانیه ارسال بشه. کلا ajax جواب نمی ده. مساله مقیاس پذیری هست. nodejs حجم پردازش رو تا 1% هم پایین میاره
  پاسخ
تشکر شده توسط :
#7
(۱۳۹۱ مهر ۰۱, ۰۶:۱۲ ب.ظ)nasserghiasi نوشته: چرا این ادغام رو انجام ندم؟
من فقط می خوام بخشی از پروژه که درخواست های ایجکس شاملش می شه رو با nodejs پیاده سازی کنم تا بار سرور بیاد پایین. شما فکر می کنید php,apache چقدر می تونه در این زمینه بهینه بشه؟
فرض کنید 1000 کاربر همزمان لاگین هستند و هر کدومشون هر 2 یا 3 ثانیه حدود 2 تا 5 درخواست ترکیبی (یعنی چند درخواست رو تو یه درخواست قرار بدیم) sync به سرور می فرستند. ببینید چه اتفاقی می افته. میشه 5000 thread
اینم بگو که تعداد درخواست ها به نسبت فازبندی و توسعه برنامه بیشتر هم می شن. مثلا درخواستی خواهد بود که هر 20 ثانیه اجرا میشه ولی مثلا یک درخواست باید هر 2 ثانیه ارسال بشه. کلا ajax جواب نمی ده. مساله مقیاس پذیری هست. nodejs حجم پردازش رو تا 1% هم پایین میاره

چرا فکر می کنی nodejs می تونه بهتر جواب بده؟ همون پردازش رو nodejs هم داره.

البته این چیزی که شما داری میگی برای php نباید چیزی باشه.
شما بهتره اول به مشکل بخوری بعد حلش کنی. شما هنوز مشکل رو ندیدی. من به هیچ عنوان این ادغام به این صورت رو بهتون پیشنهاد نمی کنم. من الان با درخواست ۳ ثانیه یه بار هم هیچ مشکلی ندارم
  پاسخ
تشکر شده توسط : zoghal ali786
#8
راستی این ادغام با رو بیشتر می کنه. به هر حال توی ادغام مگه نمی خوای دوباره یه کاری رو با php انجام بدی؟ چی رو می خوای ادغام کنی؟
  پاسخ
تشکر شده توسط :
#9
Smile
نه عزیز من با php هم به مشکل برنمی خوری kingsera الان فقط داره 100 کوئری در ثانیه می گیره و این ریکوئست گرفتن با nginex انجام می شه پردازش های php به اندازه کافی سریع هست مشکل شما تو این بخش ها نخواهد بود بهتره پیشنهادهایی که می شه را گوش بدی و وقتت را صرف توسعه سریعتر کنی وقتی کاربرانتون به اون اندازه رسیدن هم توان مالی خواهی داشت که سرورهای قدرتمندی اجاره کنی هم وقت داری که کدها را بهینه کنی و کانفیگهای بهتری پیاده کنی زمانی هم که واقعا گلوگاه های شما php باشه که خیلی خیلی دور از ذهنه می تونی از hipop استفاده کنی.
  پاسخ
تشکر شده توسط : zoghal ali786
#10
ناصر عزیز بنده هم با رامین و وحید هم نظرم.
بهینه کردن بهترین پشنهادی هست که بهت دادن مواردی که خیلی روش می تونم تاکید کنم که خیلی تاثیر داره در سرعت پاسخ گویی
1- استفاده از 5.4
2- رندر ها رو سمت کلاینت انجام بدی.
3- یک لایه مدل در کلاینت سایت داشته باشی و یک سری دیتا ها رو توی اون نگه داری کنی و در پاسخ ها موارد تغییر پیدا کرده یا مورد نیاز رو ارسال کنید. و بتونی از local storage استفاده هم استفاده کنی.
4- ریسپانس ها رو به صورت جیسون ایجاد کنی.
5- از سوکت یا کامیت بهره بگیری به همراه روش publishsubscrib
کد پی‌اچ‌پی:
http://weblog.bocoup.com/publishsubscribe-with-jquery-custom-events/ 
و خیلی روش های دیگه
  پاسخ
تشکر شده توسط : ali786 payam


پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان