PDA

View Full Version : سوال: طراحی سیستم چت پیشرفته به صورت قدم به قدم



idocsidocs
چهارشنبه 26 مرداد 1390, 03:01 صبح
من می خوام یه سیستم چت طراحی کنم ولی نمی دونم از کجا باید شروع کنم. تصمیم گرفتم که به صورت قدم به قدم با طراحی سیستم چت آشنا بشم.

کار رو با یک سوال شروع می کنم:

1- از اونجاییکه نیاز به سرعت بالا در تعامل با پایگاه داده هست، جدول رو باید از چه نوعی تعریف کنیم؟ myisam, innobod, memory یا ....

eshpilen
چهارشنبه 26 مرداد 1390, 08:37 صبح
بنظر بنده سرعت پایگاه داده در وهلهء آخره. تازه اگر مطرح باشه.
مگر اینکه چت پرترافیکی باشه.
البته بخاطر نوشتن و خواندن های متعدد و کوچکی که هست، فکر کردن روی memory خوبه.
اگر از memory استفاده نکنیم، بنظرم استفاده از myisam مناسب باشه. چون یه چته دیگه. آپولو که نمیخوای هوا کنی! ترنسکشن و اینا توش کجا بدرد میخوره؟ یه چیز انترپرایز که نیست.
البته بنده یه چت ساده یجا دیده بودم که پیغامها رو در فایل ذخیره میکرد.

idocsidocs
چهارشنبه 26 مرداد 1390, 10:55 صبح
بنظر بنده سرعت پایگاه داده در وهلهء آخره. تازه اگر مطرح باشه.
مگر اینکه چت پرترافیکی باشه.
البته بخاطر نوشتن و خواندن های متعدد و کوچکی که هست، فکر کردن روی memory خوبه.
اگر از memory استفاده نکنیم، بنظرم استفاده از myisam مناسب باشه. چون یه چته دیگه. آپولو که نمیخوای هوا کنی! ترنسکشن و اینا توش کجا بدرد میخوره؟ یه چیز انترپرایز که نیست.
البته بنده یه چت ساده یجا دیده بودم که پیغامها رو در فایل ذخیره میکرد.
myisam برای وبلاگ و این مسائل مناسب هست، و توی چت به علت تعداد درخواستهای بالا و اینکه لازم نیست داده های چت رو زیاد نگه داریم و نهایتا بعد از نمایش این دادهها می تونیم پاکشون کنیم. به همین دلیل استفاده از memory مناسب تر بنظر می رسه،نظر شما چیه؟

اصلا تا حالا ندیدم که کسی بگه از memoryاستفاده کنید، بنظر شمامعایب memory چی هست که کمتر کسی سراغ این نوع می ره؟

eshpilen
چهارشنبه 26 مرداد 1390, 11:07 صبح
اصلا تا حالا ندیدم که کسی بگه از memoryاستفاده کنید، بنظر شمامعایب memory چی هست که کمتر کسی سراغ این نوع می ره؟
نمیدونم شاید بخاطر مصرف RAM سرور.
البته شاید این سیستم به همین سادگی و بدون محدودیت نباشه.

idocsidocs
چهارشنبه 26 مرداد 1390, 11:38 صبح
نمیدونم شاید بخاطر مصرف RAM سرور. البته شاید این سیستم به همین سادگی و بدون محدودیت نباشه.
من که فکر می کنم بخاطر عدم اطلاع و کار نکردن برنامه نویس ها با این نوع هست.

مسئله دیگه اینکه توی بخش آژاکس چک کردن دیتابیس به چه صورتی باید باشه؟

یعنی اینکه در چه بازه زمانی باید پیامهایی که ما ارسال کردیم و پیامهایی که طرف مقابل ارسال کرده رو بدست بیاریم؟ آیا باید پیامهای خودمون رو توی صف نگه داریم و هر ثانیه پیامهایی که نوشتیم رو ارسال کنیم و پیامهای دریافتی رو بگیریم و نمایش بدیم یا باید از روش دیگه ای استفاده کنیم و از زمان کمتری برای اینکار استفاده کنیم؟

eshpilen
چهارشنبه 26 مرداد 1390, 12:43 عصر
یعنی اینکه در چه بازه زمانی باید پیامهایی که ما ارسال کردیم و پیامهایی که طرف مقابل ارسال کرده رو بدست بیاریم؟ آیا باید پیامهای خودمون رو توی صف نگه داریم و هر ثانیه پیامهایی که نوشتیم رو ارسال کنیم و پیامهای دریافتی رو بگیریم و نمایش بدیم یا باید از روش دیگه ای استفاده کنیم و از زمان کمتری برای اینکار استفاده کنیم؟ تازه رسیدی به اصل مطلب.
یه ترفند وجود داره بنام Comet (http://en.wikipedia.org/wiki/Comet_%28programming%29) که حتما مستحضر هستی.
در این روش ما به روشهای مختلف همیشه یک کانکشن HTTP طولانی مدت رو با سرور حفظ میکنیم (یا سرور با ما حفظ میکنه!!). بنابراین سرور هروقت چیزی داره میتونه همون موقع ارسال کنه و فورا به کلاینت برسه.
ولی جزییات دیگش رو نمیدونم و کار نکردم :لبخند:

البته مجبور نیستی از این روش استفاده کنی. همون روش چک کردن با تاخیر زمانی هم میتونه حداقل برای موارد ساده یا اولین بار که چنین پروژه ای کار میکنی کافی باشه.


آیا باید پیامهای خودمون رو توی صف نگه داریم و هر ثانیه پیامهایی که نوشتیم رو ارسال کنیم
واسه چی توی صف نگه داری؟ خب همون موقع ارسال میکنی.
ولی برای پیامهای دریافتی اگر از Comet (http://en.wikipedia.org/wiki/Comet_%28programming%29) استفاده نمیکنی طبیعتا باید در فواصل زمانی چک کنی.

idocsidocs
چهارشنبه 26 مرداد 1390, 15:14 عصر
تازه رسیدی به اصل مطلب.
یه ترفند وجود داره بنام Comet (http://en.wikipedia.org/wiki/Comet_%28programming%29) که حتما مستحضر هستی.
در این روش ما به روشهای مختلف همیشه یک کانکشن HTTP طولانی مدت رو با سرور حفظ میکنیم (یا سرور با ما حفظ میکنه!!). بنابراین سرور هروقت چیزی داره میتونه همون موقع ارسال کنه و فورا به کلاینت برسه.
ولی جزییات دیگش رو نمیدونم و کار نکردم :لبخند:

البته مجبور نیستی از این روش استفاده کنی. همون روش چک کردن با تاخیر زمانی هم میتونه حداقل برای موارد ساده یا اولین بار که چنین پروژه ای کار میکنی کافی باشه.


واسه چی توی صف نگه داری؟ خب همون موقع ارسال میکنی.
ولی برای پیامهای دریافتی اگر از Comet (http://en.wikipedia.org/wiki/Comet_%28programming%29) استفاده نمیکنی طبیعتا باید در فواصل زمانی چک کنی.
خب من از این نوع اتصال اطلاع نداشتم. برای چت باید از این روش استفاده کنم. چون وقتی کاربر چیزی تایپ می کنه طرف مقابل باید بدونه که ماربر درحال تایپ کردن هست و این به یه اتصال دائمی احتیاج داره.

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

نوشتن بقیه کار دیگه چندان گنگ نیست چون ابزار کار مشخص شد.

یه سرچی در مورد کامت می کنم و بقیه بحث رو ادامه می دیم.

البته سایر دوستان می تونن مسائل خودشون رو مطرح کنن.

...!M.J!...
چهارشنبه 26 مرداد 1390, 15:42 عصر
این کد رو نگاه کن احتمالا کمکت میکنه
http://yensdesign.com/2009/01/create-a-shoutbox-using-php-and-ajax-jquery/

اینم دموش:
http://yensdesign.com/tutorials/shoutbox/

البته از comet استفاده نشده Ajax classic هست

eshpilen
چهارشنبه 26 مرداد 1390, 23:57 عصر
خب من از این نوع اتصال اطلاع نداشتم. برای چت باید از این روش استفاده کنم. چون وقتی کاربر چیزی تایپ می کنه طرف مقابل باید بدونه که ماربر درحال تایپ کردن هست و این به یه اتصال دائمی احتیاج داره. پیامها رو هم باید در لحظه ارسال کنم و لازم نیست که توی صف نگهشون دارم و با وقفه زمانی ارسال کنم.
این اتصال درسته که برقرار هست، ولی تاجاییکه میدونم فقط سرور میتونه بعدا ازش برای ارسال پیام به شما استفاده کنه. شما یک بار فقط موقع درخواست اولیه میتونی دیتایی رو ارسال کنی، بعد باید منتظر بمونی تا سرور هروقت که پیامی داشت برای شما ارسال کنه.
بنابراین فکر نمیکنم بشه ازش برای ارسال لحظه ای پیام کاربر از کلاینت به سرور استفاده کرد.
حالا بقیهء سیستمهای چت که از Comet استفاده میکنن چکار میکنن بنده خبر ندارم. لابد موقعی که کاربر send رو میزنه ارسال میکنن. درمورد درحال تایپ بودن هم به همین ترتیب و احتمالا در فواصل زمانی.


نوشتن بقیه کار دیگه چندان گنگ نیست چون ابزار کار مشخص شد.فکر نمیکنم پیاده سازی این روش خیلی هم راحت باشه. پیچیدگی ها و حجم کد خودش رو داره.
بعدش بقیهء مسائل هم چیز کمی نیست.
بنظر من این پروژه باوجودی که بزرگ نیست و جذابه اما یه پروژهء بقول دوستم چلنجینگ (Challenging) هست. بخشی بخاطر اینکه حالت استاندارد نداره که امکانات آماده و رفتارهای مچ باهاش وجود داشته باشه. یعنی اساسا امکانات و رفتار پروتکل HTTP و سرورها برای اینطور چیزها پیشبینی و طراحی نشدن و برای پیاده کردن اینطور چیزها از ترفندهای متعددی باید استفاده کرد و حالتها و مشکلات مختلف و ناسازگاری رو پیشبینی و هندل کرد؛ خلاصه چیز سرراستی نیست.

مثلا همین Comet چیه؟ یک ترفند که با چند روش مختلف پیاده سازی میشه.
حالا در عمل چقدر دردسر داره و چه مشکلاتی ممکنه پیش بیاد خدا میدونه. مثلا شاید کانکشن بعد از مدت زمان خاصی بصورت خودکار بسته بشه. چه از طرف سرور و چه از طرف مرورگر (ممکنه رفتار سرورها و مرورگرهای مختلف در این زمینه متفاوت باشه). اونوقت شما باید این رو هندل کنی و دوباره یه کانکشن ایجاد کنی.

ضمنا بر اساس پروتکل HTTP و بنابراین چیزی که رفتار مرورگرهاست، مرورگر فقط دو کانکشن بصورت همزمان به یک دامین ایجاد میکنه. بنابراین وقتی شما یک کانکشن رو بصورت دائمی اشغال میکنی، ممکنه در لود بقیهء اجزاء و صفحات اون سایت محدودیت و کاهش سرعت محسوسی ایجاد بشه (مقدارش چقدر میتونه زیاد باشه نمیدونم). شما داری یکی از دوتا کانکشن رو حذف میکنی! چیز کمی نیست.
برای رفع این مشکل در همون مقالهء ویکیپدیا میگه که یک راه این هست که از یک دامین دیگه که به همون سرور Alias شده استفاده کنیم.

پس میبینی اینکه میگم این چیزها استاندارد نیست یعنی چی. پروتکل این چیزها رو پیشبینی نکرده؛ مرورگرها برای این کارها طراحی نشدن؛ نمیتونی اطلاعات رو بصورت دو طرفه Real time ارسال کنی؛ و خلاصه هزار و یک باگ و مشکل آزار دهنده ممکنه پیش بیاد.

idocsidocs
پنج شنبه 27 مرداد 1390, 10:39 صبح
این اتصال درسته که برقرار هست، ولی تاجاییکه میدونم فقط سرور میتونه بعدا ازش برای ارسال پیام به شما استفاده کنه. شما یک بار فقط موقع درخواست اولیه میتونی دیتایی رو ارسال کنی، بعد باید منتظر بمونی تا سرور هروقت که پیامی داشت برای شما ارسال کنه.
بنابراین فکر نمیکنم بشه ازش برای ارسال لحظه ای پیام کاربر از کلاینت به سرور استفاده کرد.
حالا بقیهء سیستمهای چت که از Comet استفاده میکنن چکار میکنن بنده خبر ندارم. لابد موقعی که کاربر send رو میزنه ارسال میکنن. درمورد درحال تایپ بودن هم به همین ترتیب و احتمالا در فواصل زمانی.

پس میبینی اینکه میگم این چیزها استاندارد نیست یعنی چی. پروتکل این چیزها رو پیشبینی نکرده؛ مرورگرها برای این کارها طراحی نشدن؛ نمیتونی اطلاعات رو بصورت دو طرفه Real time ارسال کنی؛ و خلاصه هزار و یک باگ و مشکل آزار دهنده ممکنه پیش بیاد.
من با کامیت کار نکردم و ظاهرا قدیمی هست و روی هر سروری پیاده نمی شه و بار زیادی هم روی سرور داره. پیاده سازیش هم مشکله. بعضی جاها گفتن که با وجود آژاکس دیگه نباید از کامیت استفاده کرد.

بنظرتون بهتر نیست از آژاکس و درخواستهای همزمان استفاده کنم؟

eshpilen
پنج شنبه 27 مرداد 1390, 11:02 صبح
ظاهرا قدیمی هست
قدیمی که هست. ولی قدیمی بودن لزوما منجر به نتیجهء خاصی میشه؟


و روی هر سروری پیاده نمی شه
چرا؟ از کجا فهمیدی؟


و بار زیادی هم روی سرور داره.
چرا؟ منبعی داری براش؟


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


بعضی جاها گفتن که با وجود آژاکس دیگه نباید از کامیت استفاده کرد.
کجا؟ یکی بده منم بخونم ببینم چی میگه.
البته یکی از روشهای پیاده سازی کامیت (راستی این تلفظ رو از جایی آوردی؟) بوسیلهء ایجکس (نه آژاکس!) هست. البته دقیقا خود ایجکس به شکل متعارفش که نه، ولی خیلی مشابه و با استفاده از همون بند و بساط.


بنظرتون بهتر نیست از آژاکس و درخواستهای همزمان استفاده کنم؟
درخواست همزمان یعنی چی دقیقا؟

idocsidocs
پنج شنبه 27 مرداد 1390, 11:10 صبح
قدیمی که هست. ولی قدیمی بودن لزوما منجر به نتیجهء خاصی میشه؟


چرا؟ از کجا فهمیدی؟


چرا؟ منبعی داری براش؟


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


کجا؟ یکی بده منم بخونم ببینم چی میگه.
البته یکی از روشهای پیاده سازی کامیت (راستی این تلفظ رو از جایی آوردی؟) بوسیلهء ایجکس (نه آژاکس!) هست. البته دقیقا خود ایجکس به شکل متعارفش که نه، ولی خیلی مشابه و با استفاده از همون بند و بساط.


درخواست همزمان یعنی چی دقیقا؟
توی گوگل که سرچ می کنم دیگه آدرسها رو ذخیره نمی کنم وگرنه لینکش رو می دادم.


درخواست همزمان یعنی چی دقیقا؟منظورم همون درخواستهای غیرهمزمان آژاکس هست.

گفتن که کامیت باید توی سرورهای اپتیمایز شده اجرا بشه.

جایی نیست که بشه پیاده سازی کامیت رو یادگرفت؟

eshpilen
پنج شنبه 27 مرداد 1390, 12:37 عصر
توی گوگل که سرچ می کنم دیگه آدرسها رو ذخیره نمی کنم وگرنه لینکش رو می دادم.توی History مرورگر نگاه کن شاید پیدا کنی.


منظورم همون درخواستهای غیرهمزمان آژاکس هست.اینو گفتی یه سوال ابتدایی در این ارتباط بنظرم رسید!
بنظرت اگر هنوز یه درخواست ایجکس به نتیجه نرسیده کاربر یه چیزی دیگه send کنه باید چکار کرد؟


گفتن که کامیت باید توی سرورهای اپتیمایز شده اجرا بشه.کجا گفته؟ منبعش معتبر بود؟
بعدشم یعنی چطور اپتیمایزی؟


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

alismith
پنج شنبه 27 مرداد 1390, 13:31 عصر
سلام

دوستان دیدم دارید درباره چت حرف میزنید ی سرچی کردم

اینو ببینید اگه بدرد خورد تو همین تاپیک دربارش شروع کنید به بحث ، دوست داشتید آموزش هم بدید چون من نه وقتشو دارم نه خودم ازش استفاده کردم :چشمک:

http://anantgarg.com/2009/05/13/gmail-facebook-style-jquery-chat/


جایی نیست که بشه پیاده سازی کامیت رو یادگرفت؟

اینو ببین الان سرچیدم ، اگه وقت کردم یا دیدی خوبه بگو تا خودمم بخونم، این چند وقته اصلا وقت نکردم مطالعه کنم :گریه:

http://blog.jamieisaacs.com/2010/08/27/comet-with-nginx-and-jquery/


موفق باشید

idocsidocs
جمعه 28 مرداد 1390, 17:50 عصر
سلام

دوستان دیدم دارید درباره چت حرف میزنید ی سرچی کردم

اینو ببینید اگه بدرد خورد تو همین تاپیک دربارش شروع کنید به بحث ، دوست داشتید آموزش هم بدید چون من نه وقتشو دارم نه خودم ازش استفاده کردم :چشمک:

http://anantgarg.com/2009/05/13/gmail-facebook-style-jquery-chat/



اینو ببین الان سرچیدم ، اگه وقت کردم یا دیدی خوبه بگو تا خودمم بخونم، این چند وقته اصلا وقت نکردم مطالعه کنم :گریه:

http://blog.jamieisaacs.com/2010/08/27/comet-with-nginx-and-jquery/


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

idocsidocs
جمعه 28 مرداد 1390, 17:51 عصر
توی History مرورگر نگاه کن شاید پیدا کنی.

اینو گفتی یه سوال ابتدایی در این ارتباط بنظرم رسید!
بنظرت اگر هنوز یه درخواست ایجکس به نتیجه نرسیده کاربر یه چیزی دیگه send کنه باید چکار کرد؟

کجا گفته؟ منبعش معتبر بود؟
بعدشم یعنی چطور اپتیمایزی؟

تاحالا به اون شکل دنبالش نرفتم. خبر ندارم.


بنظرت اگر هنوز یه درخواست ایجکس به نتیجه نرسیده کاربر یه چیزی دیگه send کنه باید چکار کرد؟
می شه درخواستها رو توی صف نگه داشت و وقتی درخواست آژاکس انجام شد درخواستهای توی صف رو ارسال کرد.

اگه کامیت با همه سرورها خوب کار کنه و باعث مشکل نشه، می شه برای گرفتن پیامها از کامیت ارسال کرد و برای ارسال پیام از آژاکس.

eshpilen
جمعه 28 مرداد 1390, 18:07 عصر
اینها که همش انگلیسی بود. راستش منم وقت نمی کنم که این همه مطلب انگلیسی رو بخونم.
بنده نگاه کردم و چیز زیادی عایدم نشد :لبخند:
بنظرم نیامد چندان کمکی بهمون بکنه. ضمنا یکیش مثل اینکه مال یه سرور و امکانات خاصی بود.


می شه درخواستها رو توی صف نگه داشت و وقتی درخواست آژاکس انجام شد درخواستهای توی صف رو ارسال کرد.
آره میشه. ولی بعدا یه راه ساده تر بنظرم رسید که فکر میکنم خوب باشه. میتونیم تا وقتی نتیجهء درخواست قبلی مشخص نشده اجازهء ارسال پیام جدید رو ندیم. یعنی دکمهء send رو disable کنیم و با پیامی، چراغ قرمزی چیزی نشون بدیم که یه پیام درحال ارساله.


اگه کامیت با همه سرورها خوب کار کنه و باعث مشکل نشه، می شه برای گرفتن پیامها از کامیت ارسال کرد و برای ارسال پیام از آژاکس.
آره همینطوره.

راستی امروز ممکن بود روی یه نمونهء خیلی ساده و آزمایشی برای نشون دادن الگوریتم کامیت کار کنم، ولی درگیر موضوع اون یکی تاپیک (http://barnamenevis.org/showthread.php?300377-%DA%A9%D9%85%DA%A9-%D9%81%D9%88%D8%B1%DB%8C%D8%9F-%D9%85%D8%B4%DA%A9%D9%84-%D8%AF%D8%B1-%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-%D8%A7%D8%B2-%D8%AA%D8%A7%D8%A8%D8%B9-preg_replace) شدم که بنظرم مهمتر بود.

idocsidocs
جمعه 28 مرداد 1390, 18:59 عصر
راستی امروز ممکن بود روی یه نمونهء خیلی ساده و آزمایشی برای نشون دادن الگوریتم کامیت کار کنم، ولی درگیر موضوع اون یکی تاپیک (http://barnamenevis.org/showthread.php?300377-%DA%A9%D9%85%DA%A9-%D9%81%D9%88%D8%B1%DB%8C%D8%9F-%D9%85%D8%B4%DA%A9%D9%84-%D8%AF%D8%B1-%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-%D8%A7%D8%B2-%D8%AA%D8%A7%D8%A8%D8%B9-preg_replace) شدم که بنظرم مهمتر بود.

وقتت رو تقسیم کن تا بتونی به دوتا بحث برسی :چشمک:

eshpilen
جمعه 28 مرداد 1390, 19:22 عصر
بنظر من یکی رو سریعتر به نتیجه برسونیم بهتره.
این بهتره بعد از دو روز دوتا سیب داشته باشی یا اینکه روز اول یه سیب بدست بیاری و روز دوم هم یه سیب دیگه؟ :لبخند:
تازه کیفیت و سرعت کار هم با کار همزمان ممکنه پایین بیاد بخاطر پیچیدگی و وقفه های زمانی و قاطی شدن و اینا.
نتیجه میشود دوتا سیب پلاسیده بعد از دو روز :قهقهه:
یا دوتا سیب سالم بعد از سه روز.
یا شایدم دوتا سیب پلاسیده بعد از سه روز!!

idocsidocs
شنبه 29 مرداد 1390, 22:51 عصر
بنظر من یکی رو سریعتر به نتیجه برسونیم بهتره.
این بهتره بعد از دو روز دوتا سیب داشته باشی یا اینکه روز اول یه سیب بدست بیاری و روز دوم هم یه سیب دیگه؟ :لبخند:
تازه کیفیت و سرعت کار هم با کار همزمان ممکنه پایین بیاد بخاطر پیچیدگی و وقفه های زمانی و قاطی شدن و اینا.
نتیجه میشود دوتا سیب پلاسیده بعد از دو روز :قهقهه:
یا دوتا سیب سالم بعد از سه روز.
یا شایدم دوتا سیب پلاسیده بعد از سه روز!!
توی این مدتی که توی انجمن هستم و برنامه نویسی می کنم این دفعه اول هست که گیج می شم !:چشمک:

اقا چیکار کنیم بریم سیب بشماریم یا چت روم بنویسیم !:چشمک:

خلاصه اگه یه آموزش به فارسی برای راه اندارس comet پیدا کردید برای من هم بفرستید.

alismith
سه شنبه 01 شهریور 1390, 18:28 عصر
اینها که همش انگلیسی بود. راستش منم وقت نمی کنم که این همه مطلب انگلیسی رو بخونم.

دوست عزیز من چند روزی نیومدم تو انجمن ، در رابطه با انگلیسی که بله خوب من هم نگفتم فارسی هستش ، ولی سعی می کنم در اولین فرصت یک تحقیقی در این رابطه انجام بدم و اگر مطلب قابل قبول و همچنین فارسی پیدا کردم در همین تاپیک قرار میدم

موفق باشید

idocsidocs
سه شنبه 01 شهریور 1390, 20:11 عصر
اگه یه آموزش به فارسی برای راه اندارس comet پیدا کردید برای من هم بفرستید.

eshpilen
سه شنبه 01 شهریور 1390, 21:27 عصر
بنده چت comet درست کردم. چطور بود بنظرت؟
روشش رو متوجه شدی؟
البته چیزی غیر از مقالهء ویکیپیدا رو نخوندم و جایی نمونه کدی چیزی ندیدم. ولی فکر میکنم روش درست و خوبی بود. آنلاین هم تست کردم ظاهرا خوب کار میکرد.

idocsidocs
سه شنبه 01 شهریور 1390, 22:29 عصر
بنده چت comet درست کردم. چطور بود بنظرت؟
روشش رو متوجه شدی؟
البته چیزی غیر از مقالهء ویکیپیدا رو نخوندم و جایی نمونه کدی چیزی ندیدم. ولی فکر میکنم روش درست و خوبی بود. آنلاین هم تست کردم ظاهرا خوب کار میکرد.
راه اندازیش چطوریه؟ بنظرم می رسه که باید یه اسکریپت آماده استفاده کنیم و بقیه کارهاش هم مثل روال عادی هست.

خوشحال می شم یه توضیح مفصل در مورد راه اندازی کامیت ارائه بدید.

آیا توی مقاله ویکیپدیا نگفتن که چه تعداد از سایتهای معروف از این روش برای سیستم چت استفاده می کنن؟

eshpilen
سه شنبه 01 شهریور 1390, 22:50 عصر
راه اندازی؟
کدوم راه اندازی؟
اگر مال بنده رو میگی که هیچ راه اندازی خاصی نداره جز تنظیم پرمیشن دایرکتوری و چند فایل داده ای برنامه که PHP بتونه اونا رو بخونه و بنویسه.

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

idocsidocs
چهارشنبه 02 شهریور 1390, 00:07 صبح
راه اندازی؟
کدوم راه اندازی؟
اگر مال بنده رو میگی که هیچ راه اندازی خاصی نداره جز تنظیم پرمیشن دایرکتوری و چند فایل داده ای برنامه که PHP بتونه اونا رو بخونه و بنویسه.

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

حدس می زنم خیلی ها به این آموزش احتیاج دارن. اگر خواستید این کار رو بکنید لطفا توی این تاپک اعلام کنید.

idocsidocs
چهارشنبه 02 شهریور 1390, 12:37 عصر
دوستان برای یادگیری comet به این تاپک مراجعه کنید (http://barnamenevis.org/showthread.php?300636)، من هم سوالاتم رو در مورد کامیت اونجا مطرح می کنم. از کاربر عزیز (http://barnamenevis.org/member.php?148005-eshpilen) که زحمت این آموزش رو کشیدن تشکر می کنم.

بعد از اینکه کامیت رو یادگرفتیم به بحث خودمون در مورد نوشتن سیستم چت پیشرفته ادامه می دیم.

alismith
پنج شنبه 03 شهریور 1390, 03:03 صبح
سلام
آقا منبع فارسی پیدا نکردم ، هر چی هم باشه فقط توضیح مختصر هستش که خودت بلدی
اما این لینک رو ببین درباره پیاده سازی همین روش هست :

http://www.zeitoun.net/articles/comet_and_php/start

که از Prototype (http://www.prototypejs.org/) استفاده کرده، من خودم در این زمینه تجربه عملی ندارم ، اگه دوستان این روشو پیاده سازی کردن و به جواب رسیدن حتما تجربیات شون رو اینجا قرار بدند تا من و سایرین استفاده کنیم

ممنون


موفق باشید

idocsidocs
پنج شنبه 03 شهریور 1390, 14:10 عصر
سلام
آقا منبع فارسی پیدا نکردم ، هر چی هم باشه فقط توضیح مختصر هستش که خودت بلدی
اما این لینک رو ببین درباره پیاده سازی همین روش هست :

http://www.zeitoun.net/articles/comet_and_php/start

که از Prototype (http://www.prototypejs.org/) استفاده کرده، من خودم در این زمینه تجربه عملی ندارم ، اگه دوستان این روشو پیاده سازی کردن و به جواب رسیدن حتما تجربیات شون رو اینجا قرار بدند تا من و سایرین استفاده کنیم

ممنون


موفق باشید
قعلا داریم روی کامیت کار می کنیم، بعد از مشخص شدن بحث کامیت روش نوشتن سیستم چت کار می کنیم.

A B C D
جمعه 04 شهریور 1390, 13:02 عصر
سلام
آقا منبع فارسی پیدا نکردم ، هر چی هم باشه فقط توضیح مختصر هستش که خودت بلدی
اما این لینک رو ببین درباره پیاده سازی همین روش هست :

http://www.zeitoun.net/articles/comet_and_php/start

که از Prototype (http://www.prototypejs.org/) استفاده کرده، من خودم در این زمینه تجربه عملی ندارم ، اگه دوستان این روشو پیاده سازی کردن و به جواب رسیدن حتما تجربیات شون رو اینجا قرار بدند تا من و سایرین استفاده کنیم

ممنون


موفق باشید
روش اولی که مطرح کرده روش Streaming است که با استفاده از فریم پنهان داخلی پیاده سازی شده.
Streaming شکلی از پیاده سازی کامیت است که از یک ارتباط HTTP دائمی برای ارسال تمام پاسخها از سمت سرور به کلاینت استفاده میشود.

روش دومی که مطرح کرده دقیقا همان روشی است که در تاپیک Comet چیست - به چه دردی میخوره! - چگونه پیاده سازی میشود. (http://barnamenevis.org/showthread.php?301779-Comet-%DA%86%DB%8C%D8%B3%D8%AA-%D8%A8%D9%87-%DA%86%D9%87-%D8%AF%D8%B1%D8%AF%DB%8C-%D9%85%DB%8C%D8%AE%D9%88%D8%B1%D9%87%21-%DA%86%DA%AF%D9%88%D9%86%D9%87-%D9%BE%DB%8C%D8%A7%D8%AF%D9%87-%D8%B3%D8%A7%D8%B2%DB%8C-%D9%85%DB%8C%D8%B4%D9%88%D8%AF.) نشان داده شده. یعنی روش long polling که با استفاده از AJAX پیاده سازی شده است.

تفاوت long polling با Streaming اینه که در Streaming یک درخواست اولیه فرستاده میشه و بعد پاسخهای نامحدودی در زمانهای مختلف که فرضا محتوی متن پیامهای چت طرف مقابل هستن میتونن از طریق ارتباط ایجاد شده به مرورگر ارسال بشن، اما در long polling فقط یک پاسخ به ازای هر درخواست میتونه دریافت بشه چون بعد از دریافت یک پاسخ، ارتباط HTTP توسط مرورگر خاتمه پیدا میکنه، و بنابراین ما باید با دریافت هر پاسخ دوباره یک درخواست جدید برای باز شدن یک کانال ارتباطی دیگر به سرور بفرستیم.

البته بنظرم برای نشان دادن این روشها یه مقدار مطلب رو زیادی پیچونده و کدهای جاوااسکریپت پیچیده ای نوشته و میشد ساده تر نشونش داد.
استفاده از Prototype (http://www.prototypejs.org/) هم صرفا برای ساده تر کردن نوشتن کدهای جاوااسکریپت بوده و Prototype (http://www.prototypejs.org/) خودش امکاناتی برای کامیت ارائه نمیکنه (فرضا اگر هم امکاناتی برای کامیت داشته باشه اما حداقل در این مثالها استفاده نشدن).

idocsidocs
جمعه 04 شهریور 1390, 14:53 عصر
روش اولی که مطرح کرده روش Streaming است که با استفاده از فریم پنهان داخلی پیاده سازی شده.
Streaming شکلی از پیاده سازی کامیت است که از یک ارتباط HTTP دائمی برای ارسال تمام پاسخها از سمت سرور به کلاینت استفاده میشود.

روش دومی که مطرح کرده دقیقا همان روشی است که در تاپیک Comet چیست - به چه دردی میخوره! - چگونه پیاده سازی میشود. (http://barnamenevis.org/showthread.php?301779-Comet-%DA%86%DB%8C%D8%B3%D8%AA-%D8%A8%D9%87-%DA%86%D9%87-%D8%AF%D8%B1%D8%AF%DB%8C-%D9%85%DB%8C%D8%AE%D9%88%D8%B1%D9%87%21-%DA%86%DA%AF%D9%88%D9%86%D9%87-%D9%BE%DB%8C%D8%A7%D8%AF%D9%87-%D8%B3%D8%A7%D8%B2%DB%8C-%D9%85%DB%8C%D8%B4%D9%88%D8%AF.) نشان داده شده. یعنی روش long polling که با استفاده از AJAX پیاده سازی شده است.

تفاوت long polling با Streaming اینه که در Streaming یک درخواست اولیه فرستاده میشه و بعد پاسخهای نامحدودی در زمانهای مختلف که فرضا محتوی متن پیامهای چت طرف مقابل هستن میتونن از طریق ارتباط ایجاد شده به مرورگر ارسال بشن، اما در long polling فقط یک پاسخ به ازای هر درخواست میتونه دریافت بشه چون بعد از دریافت یک پاسخ، ارتباط HTTP توسط مرورگر خاتمه پیدا میکنه، و بنابراین ما باید با دریافت هر پاسخ دوباره یک درخواست جدید برای باز شدن یک کانال ارتباطی دیگر به سرور بفرستیم.

البته بنظرم برای نشان دادن این روشها یه مقدار مطلب رو زیادی پیچونده و کدهای جاوااسکریپت پیچیده ای نوشته و میشد ساده تر نشونش داد.
استفاده از Prototype (http://www.prototypejs.org/) هم صرفا برای ساده تر کردن نوشتن کدهای جاوااسکریپت بوده و Prototype (http://www.prototypejs.org/) خودش امکاناتی برای کامیت ارائه نمیکنه (فرضا اگر هم امکاناتی برای کامیت داشته باشه اما حداقل در این مثالها استفاده نشدن).
می شه در مورد راه اندازی کامیت به روش Streaming توضیح بدید؟ چون روش long polling محدودیتهایی داره و تعداد درخواستهای ردوبدل شده رو زیاد می کنه.

A B C D
جمعه 04 شهریور 1390, 18:06 عصر
می شه در مورد راه اندازی کامیت به روش Streaming توضیح بدید؟ چون روش long polling محدودیتهایی داره و تعداد درخواستهای ردوبدل شده رو زیاد می کنه.

در بخشی از مقالهء ویکیپدیا میگه:

None of the above streaming transports work across all modern browsers without negative side-effects. This forces Comet developers to implement several complex streaming transports, switching between them depending on the browser. Consequently many Comet applications use long polling, which is easier to implement on the browser side, and works, at minimum, in every browser that supports XHR.

ترجمه:
« هیچکدام از روشهای streaming بالا بر روی تمام مرورگرها بدون اثرات جانبی منفی کار نمیکنند. این توسعه دهندگان کامیت را مجبور به توسعهء چندین روش انتقال streaming پیچیده میکند که بر اساس مرورگر بین آنها سویچ میکنند. نتیجتا بسیاری از اپلیکیشن های کامیت از long polling استفاده میکنند که در سمت مرورگر پیاده سازی راحتتری دارد و در یک حداقل در هر مرورگری که از XHR پشتیبانی کند کار میکند. »

فکر نمیکنم اون درخواست های اضافی در بیشتر کاربردها چیز مهمی باشه بطور معمول (انتظار میره با فاصلهء زمانی کافی اتفاق بیفتن). با این مزایایی که روش long polling داره بهتره بیخودی کار خودمون رو سخت نکنیم، مگر اینکه با این روش عملا به مشکل و محدودیت بربخوریم.
البته سعی میکنم یه نمونه از روش streaming رو هم در تاپیک مربوطه نشون بدم؛ اگر جای وقت و اولویتش رو داشتم.

idocsidocs
جمعه 04 شهریور 1390, 18:58 عصر
در بخشی از مقالهء ویکیپدیا میگه:

None of the above streaming transports work across all modern browsers without negative side-effects. This forces Comet developers to implement several complex streaming transports, switching between them depending on the browser. Consequently many Comet applications use long polling, which is easier to implement on the browser side, and works, at minimum, in every browser that supports XHR.

ترجمه:
« هیچکدام از روشهای streaming بالا بر روی تمام مرورگرها بدون اثرات جانبی منفی کار نمیکنند. این توسعه دهندگان کامیت را مجبور به توسعهء چندین روش انتقال streaming پیچیده میکند که بر اساس مرورگر بین آنها سویچ میکنند. نتیجتا بسیاری از اپلیکیشن های کامیت از long polling استفاده میکنند که در سمت مرورگر پیاده سازی راحتتری دارد و در یک حداقل در هر مرورگری که از XHR پشتیبانی کند کار میکند. »

فکر نمیکنم اون درخواست های اضافی در بیشتر کاربردها چیز مهمی باشه بطور معمول (انتظار میره با فاصلهء زمانی کافی اتفاق بیفتن). با این مزایایی که روش long polling داره بهتره بیخودی کار خودمون رو سخت نکنیم، مگر اینکه با این روش عملا به مشکل و محدودیت بربخوریم.
البته سعی میکنم یه نمونه از روش streaming رو هم در تاپیک مربوطه نشون بدم؛ اگر جای وقت و اولویتش رو داشتم.

در مورد روشهای پیاده سازی streaming باید بیشتر بررسی کنم تا اگه خیلی پیچیده بود و برای مرورگرها مشکل ایجاد می کرد، ازش استفاده نکنم. می شه بگید منظور از "هر مرورگری که از XHR پشتیبانی کنه" چیه؟

A B C D
جمعه 04 شهریور 1390, 20:14 عصر
XHR همون شیء XMLHttpRequest هست که برای AJAX بکار میره.

امیـرحسین
جمعه 04 شهریور 1390, 20:56 عصر
Web Socket برای چنین کاری بسیار بهتر و بهینه‌تر از Comet عمل میکنه البته اگر سازگاریش با مرورگرهای مختلف تست بشه....

A B C D
جمعه 04 شهریور 1390, 21:15 عصر
ساپورت WebSocket (http://en.wikipedia.org/wiki/WebSocket) در مرورگرها هنوز بقدر کافی خوب نیست.
بطور مثال فقط در نسخهء 6 فایرفاکس ساپورت میشه و در IE هم که اساسا مشکل داریم مگر احتمالا در آخرین نسخه ها. همچین Opera هم فعلا ساپورت نمیکنه. البته پیش از این در FF4 و Opera11 پیاده سازی شده، اما بخاطر وجود یک باگ در پروتکل، برای جلوگیری از آسیب پذیری امنیتی بصورت پیشفرض غیرفعال شد.
از طرف دیگه فکر میکنم خود وب سرور هم باید ساپورت داشته باشه.

idocsidocs
جمعه 04 شهریور 1390, 23:50 عصر
Web Socket برای چنین کاری بسیار بهتر و بهینه‌تر از Comet عمل میکنه البته اگر سازگاریش با مرورگرهای مختلف تست بشه....

می شه بگید سوکتها چه مزیتی نسبت به کامیت دارن؟ لطفا بیشتر توضیح بدید.

idocsidocs
شنبه 05 شهریور 1390, 19:55 عصر
تقریبا کارمون با کامیت تموم شده و دیگه می دونیم کامیت چیه. (http://barnamenevis.org/showthread.php?301779-Comet-%DA%86%DB%8C%D8%B3%D8%AA-%D8%A8%D9%87-%DA%86%D9%87-%D8%AF%D8%B1%D8%AF%DB%8C-%D9%85%DB%8C%D8%AE%D9%88%D8%B1%D9%87%21-%DA%86%DA%AF%D9%88%D9%86%D9%87-%D9%BE%DB%8C%D8%A7%D8%AF%D9%87-%D8%B3%D8%A7%D8%B2%DB%8C-%D9%85%DB%8C%D8%B4%D9%88%D8%AF.)

بعد از این بحث می خوام روی این مسئله کار کنم که چطور می شه همه درخواستهای چت با یه نفر رو می شه به یه صفحه ارسال کرد؟

مسئله دیگه اینکه وقتی کاربر داره تایپ می کنه طرف مقابل باید از این مسئله باخبر باشه. روش پیاده سازی این ویژگی چطوری هست؟

daniyal26
پنج شنبه 03 آذر 1390, 18:55 عصر
یا سلام به دوستان عزیز من واسه کامیت به روش long polling از سورس این اسکریپت استفاده می کنم که تو تمام توابع ایجکسش کامل توضیح داده و فکر نمی کنم از این راحت تر بشه اسکریپتی پیدا کرد واسه اصلاعات از دیتا بیس استفاده کرده و به راحتی میشه با تغییرات php اونو به یه فرم پشتیبانی تبدیل کرد اینم لینک دانلودش البته گفته برای استفاده باید از لایسنس استفاده کرد که .....
http://www.phpcandy.com

idocsidocs
جمعه 04 آذر 1390, 10:28 صبح
یا سلام به دوستان عزیز من واسه کامیت به روش long polling از سورس این اسکریپت استفاده می کنم که تو تمام توابع ایجکسش کامل توضیح داده و فکر نمی کنم از این راحت تر بشه اسکریپتی پیدا کرد واسه اصلاعات از دیتا بیس استفاده کرده و به راحتی میشه با تغییرات php اونو به یه فرم پشتیبانی تبدیل کرد اینم لینک دانلودش البته گفته برای استفاده باید از لایسنس استفاده کرد که .....
شما خودتون از لایسنس استفاده می کنید؟

daniyal26
شنبه 05 آذر 1390, 20:03 عصر
من نگفتم از لایسنس استفاده می کنم گفتم اون اینجوری خواسته علاوه براین من برای آشنایی بیشتر اینو معرفی کردم واسه استفاده تو سایت اسکریپتهای بهتری هم هست

daniyal26
شنبه 05 آذر 1390, 20:09 عصر
برای مثال میتونین از این هم که کمی کارشو گسترده کرده و واسه تماس ها کانال تعریف کرده که اطلاعات حالت خصوصی پیدا کنن بنظر من این دوتا اسکریپت واسه بررسی مناسب هستن من که خودم فقط php بلدم کمی از اون سر درآوردم http://sourceforge.net/projects/ajax-chat/files/