PDA

View Full Version : برنامه آزمایشی الگوریتم چت Comet



eshpilen
دوشنبه 31 مرداد 1390, 15:08 عصر
اینو دیشب تا الان درست کردم.
فقط میخواستم ببینم پیاده سازی Comet چطوریه.
ضمنا میخواستم حالت آموزش/نمایش الگوریتم هم داشته باشه، ولی ظاهرا بیش از حد پیچیده و حجیم شده و بدون توضیحات خط به خط ممکنه فهمیدن اون برای مبتدی ها خیلی دشوار باشه.

طرز تست برنامه ساده هست. فقط باید PHP امکان نوشتن و خواندن فایل در دایرکتوری برنامه رو داشته باشه.
بعد کافیه فایل client1.php و client2.php رو هرکدام در یک پنجرهء/تب مرورگر اجرا کنید. اونطور که تست کردم فرقی نمیکنه در یک مرورگر باشه یا دو نوع مرورگر. البته بنده فقط در IE8 و FF3.6.8 تستش کردم.

ضمنا این فقط یه برنامهء آزمایشی ساده هست برای تست و نشون دادن الگوریتم Comet به یکی از روشهای ممکن از میان روشهای مختلف. برنامه لزوما کامل و بدون باگ نیست و صرفا بین دو فایل ذکر شده امکان چت رو فراهم میکنه و پیامها و گزارش وضعیت هایی رو هم نشون میده که برای آشنایی با طرز کار و ضمنا برای کمک در توسعه و باگیابی هستن.

این برنامه رو فقط بصورت لوکال تست کردم.

amin1softco
دوشنبه 31 مرداد 1390, 16:04 عصر
باحال بود دمت گرم اونقدارام که فکر می کردم سخت نیست ....

eshpilen
دوشنبه 31 مرداد 1390, 17:43 عصر
اگر Comet رو میگید اصولش ساده هست، اما در عمل مسائل ظریف و محدودیت و مشکل زیاد داره که باید هندل کرد.
البته Comet هم به چند روش پیاده سازی میشه. بنده از متد Long polling استفاده کردم.
بعد اگر بخوایم یه سیستم چت کامل و منطعف درست کنیم خیلی بیشتر از اینهم کار میخواد. این فقط یه برنامهء آزمایشیه برای نشان دادن اصول و الگوریتم کلی Comet که تنها بخشی از یک سیستم چت کامله. البته سیستم چت رو میشه بدون Comet هم درست کرد که بنظرم ساده ترش میکنه.

از طرف دیگه میگن معما چون حل شود آسان شود!
با کلی مشکل و باگ عجیب در این برنامه مواجه شدم و با کلی فکر و تست تونستم علتشون رو بفهمم و رفع کنم. خصوصا در اینطور برنامه ها تست کردن هم کار راحتی نیست.
تازه بازم حتما چنتایی باگ ظریف در این برنامه هست. ولی فکر میکنم بحدی که برای یه برنامهء آزمایشی که کلیت و کارایی الگوریتم رو نشون بده و قابل تست بدون مشکل باشه لازمه روش کار کردم.

eshpilen
سه شنبه 01 شهریور 1390, 10:04 صبح
راستی اگر خواستید این برنامه رو آنلاین تست کنید، باید بجز دایرکتوری برنامه، پرمیشن خواندن و نوشتن رو روی فایلهای 1، 2، counter1 و counter2 هم اعمال کنید.
بنده الان میخواستم برنامه رو آنلاین تست کنم متوجه این موضوع شدم.
البته نتونستم برنامه رو آنلاین تست کنم چون سرعت هاستش افتضاح هست، ولی حداقل نکتهء بالا بهم یادآوری شد.

mohammad-gh
جمعه 16 فروردین 1392, 10:48 صبح
با سلام و خسته نباشید
من comet را با توضیحات شما در سایت یاد گرفتم و تصمیم گرفتم روش قدیمی خودم برای چت رو کنا ر بگذارم
اما سوالاتی در این مورد است که بهتره قبلا از شما که استاد این امر هستید بپرسم

1- به نظر شما این روش برای گفتگوی انلاین (البته محدود ) در یک سایت جامعه مجازی جواب میده
2- اگر به جای فایل از دیتابیس استفاده کنیم چقدر در سرعت تاثیر خواهد گذاشت
3- در برنامه شما امکان ارتباط دو نفر با هم ایجاد شده ، و برای دو نفر فایل پیام را داریم
حال اگر دو شخص دیگه هم در حال چت باشند ، پیامها روی هم نوشته خواهند شد و ....
میشه برای ارتباطات مختلف از این روش و با فایل و .. استفاده کرد

eshpilen
جمعه 16 فروردین 1392, 13:07 عصر
اما سوالاتی در این مورد است که بهتره قبلا از شما که استاد این امر هستید بپرسم
استاد؟
من فقط یه تحقیقات و تست اولیه کردم.
از نظر تجربی کارایی این روش در شرایط واقعی (ترافیک عمومی) رو تست نکردم.


1- به نظر شما این روش برای گفتگوی انلاین (البته محدود ) در یک سایت جامعه مجازی جواب میده
نمیدونم. اگر ترافیکش زیاد نباشه نباید مشکلی باشه.
بهرحال کاربرد کامیت فقط چت و جاهایی نیست که عمومی باشه یا کاربر زیاد داشته باشه.


2- اگر به جای فایل از دیتابیس استفاده کنیم چقدر در سرعت تاثیر خواهد گذاشت
فکر نمیکنم در اکثریت موارد معمولی تاثیر مهمی داشته باشه.
ولی خب این فقط یک استنباط تئوریک است. گفتم که تجربهء عملی کافی ندارم.
بهرحال من فکر نمیکنم تفاوت پرفورمنس بین دیتابیس و فایل بتونه Bottleneck چنین برنامه هایی باشه.


3- در برنامه شما امکان ارتباط دو نفر با هم ایجاد شده ، و برای دو نفر فایل پیام را داریم
حال اگر دو شخص دیگه هم در حال چت باشند ، پیامها روی هم نوشته خواهند شد و ....
میشه برای ارتباطات مختلف از این روش و با فایل و .. استفاده کرد
همه کار میشه کرد به شرطی که برنامه نویس دانش و مهارت و توانایی کافی داشته باشه.
بنظرم این چیزها مثل چت عمومی و کامیت چیزهایی نیستن که مبتدی ها بخوان برن دنبالش.
البته استفاده از فایل در مثال بنده در اصل بخاطر سادگی و واضحی بوده هم از نظر نوشتنش و هم از نظر آموزشی، چون فقط مثال و نمونهء آموزشی بوده. هیچ لزومی نیست از فایل استفاده کنید. میتونید از دیتابیس هم استفاده کنید اگر برنامتون اینطوری ساده تر میشه.

tehro0n
جمعه 16 فروردین 1392, 15:25 عصر
من خودم شخصا از روش Ajax Reverse استفاده می کنم که بهتر از این روش است، برای ارسال و دریافت اطلاعات نیز می تونید از JSON JQuery استفاده کنید

اگر به جای فایل از دیتابیس استفاده کنیم چقدر در سرعت تاثیر خواهد گذاشت
سرعت خواندن اطلاعات از فایلی که نیاز به کوئری گرفتن نداشته باشه بیشتر از فایل های دیتابیسی است که باید کوئری بگیریم

mohammad-gh
چهارشنبه 08 خرداد 1392, 20:22 عصر
من گفتگوی آنلاین رو به طور عملی به روش کامت و به طور کامل کار کردم
اما سیستم چتی که با این روش کار کردم به سرعت منابع سیستم رو گرفت و تعداد پروسسها هم بیش از اندازه شد
در نتیجه سایت هنگ کرد و به ارور 500 رسید
در حقیقت لین سیستم در عمل با شکست مواجه شد
اگر روش دیگری که اینقدر سرور رو مشغول نکنه سراغ دارید لطفا راهنمایی کنید

WOLF_MEHRDAD
چهارشنبه 08 خرداد 1392, 20:50 عصر
اگر روش دیگری که اینقدر سرور رو مشغول نکنه سراغ دارید لطفا راهنمایی کنید

بهترین گزینه node.js هست.