نحوه کار سیستم چت gmail

overcrash

Active Member
سلام دوستان
(اول اینکه گشتم و چیزی پیدا نکردم. دوم اینکه لطفا مربوط به موضوع حرف بزنید و پیشنهاد دیگه ندید )

شاید خیلیهاتون چت GMAIL رو دیده باشید. میخواستم بدونم چجوری کار میکنه؟
(سوالمو اینجوری شروع کردم که راحتتر بفهمید.)

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

Ali_Farhadi

Member
سلام

Gmail کلا سیستمش تقریبا میشه گفت spi هستش ولی از ajax استفاده نمیکنه در واقع کاری رو که با ajax انجام میدن با استفاده از Iframe انجام میده.

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

یه سیستم چت مشابه هم ما داریم مینویسیم که در مرحله تست هستش و به زودی توی سایت MihanNIC.com نصب میشه. :)
 

overcrash

Active Member
سلام

Gmail کلا سیستمش تقریبا میشه گفت spi هستش ولی از ajax استفاده نمیکنه در واقع کاری رو که با ajax انجام میدن با استفاده از Iframe انجام میده.

و اما در مورد چتش ، برای ارسال که مشخصه به محض اینکه شما پیامی تایپ کنید و enter بزنید ارسال میشه به سرور و در دیتابیس ذخیره میشه.
ممنون ولی این سوال من نبود.
اما برای دریافت اطلاعات هم به صورت تناوبی از سرور اطلاعات دریافت میکنه تا ببینه پیام جدیدی برای شما اومده یا نه در صورت موجود بودن پیام اون رو نمایش میده.
شما مطمئنید که بصورت تناوبی میره سرور چک میکنه؟ یعنی ثانیه ای یک بار چک میکنه ؟ بعید بنظر میرسه!!!
و اگه این دوره بیشتر از یک ثانیه هست که مطلقا اشتباه هست چون پیامها سری ردوبدل میشن!

اینی که شما گفتید ساده ترین و معمولی ترین روش چت هست که مطمئنم (با توضیحاتی که گفتم) GMAIL اینجوری عمل نمیکنه!
 

Ali_Farhadi

Member
overcrash گفت:
شما مطمئنید که بصورت تناوبی میره سرور چک میکنه؟ یعنی ثانیه ای یک بار چک میکنه ؟ بعید بنظر میرسه!!!
و اگه این دوره بیشتر از یک ثانیه هست که مطلقا اشتباه هست چون پیامها سری ردوبدل میشن!
بله دقیقا همینطوری کار میکنه، به صورت تناوبی سرور رو چک میکنه که این کار میتونه توسط کانکشن های پیاپی در دوره های 1 ثانیه ای انجام بشه و یا از طریق یک کانکشن لایو انجام بشه.
البته استفاده از لایو کانکشن خیلی بعیده چون محدودیت های زیادی داره.
اگر وقتی صفحه gmail باز است اتصال اینترنت رو قطع کنید. می بینید که در همون قسمت contacts یک پیام برای retry کردن ظاهر میشه. که هر بار دوره زمانی رو برای retry کردن افزایش میده.

با توجه به محدودیت هایی که وب داره به نظر میرسه راه دیگه ای وجود نداشته باشه.
 
آخرین ویرایش:

overcrash

Active Member
ولی من دوتا جی میل باز کردم و شروع کردم به چت کردن
وقتی نمینوشتم هیچ send or recieve نداشتم ولی به محض فوکوس شروع به send میکرد و alarm میداد.

حتما شما هم اینجوری یه چک بکن
(بدون شک تماس شمارو چک میکنه پس disconnect شدن دلیلی برای این حالت نیست :) )
 

Ali_Farhadi

Member
اگر واقعا هیچ send و receive صورت نمیگیره پس حتما از لایو کانکشن استفاده شده.
یعنی برای دریافت اطلاعات یک ارتباط دائم برقرار میشه ولی تا زمانی که اطلاعات موجود نباشه چیزی ارسال نمیشه.

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

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

این دیگه آخرین راه حلی هستش که به ذهن من میرسه.
 
آخرین ویرایش:

overcrash

Active Member
ali جان میشه یه بار دیگه توضیح بدی منظورت از لایو کانکشن چی هست؟!
وقتی هیچ send , recieve صورت نمیگیره! این ارتباط چجوری چک میکنه که بسته جدید اومده؟ (منظورم کامپیوتر شخص گیرنده پیام هست)

گرچه با آجاکس کارکردنش موضوع سوال من نیست ولی - کدهارو که دیدم - بنظر منم با آجاکس کار میکنه.
 

Ali_Farhadi

Member
سلام

در واقع gmail هم از ajax استفاده میکنه و هم از iframe.
در مورد نحوه کار gmail باید بگم تقریبا 90% سیستم gmail از iframeCall که نوعی ajax شبیه سازی شده با iframe هستش استفاده میکنه و البته توی سیستم چتش بیشتر از ajax استفاده شده.

و اما در مورد نحوه عملکرد سیستم چت gmail
برای ارسال پیام ها که ابهامی وجود نداره، با یک ارتباط آجاکسی پیام تایپ شده شما رو میفرسته به سرور.
می مونه نحوه دریافت پیام های جدید از سرور.
با بررسی هایی که انجام دادم تقریبا مطمئن شدم که سیستم چت gmail از لایو کانکشن برای دریافت اطلاعات استفاده میکنه.
با توجه به توضیحاتی که قبلا در رابطه با لایو کانکشن دادم برای روشن تر شدن موضوع تفاوت بین ارتباط معمولی و ارتباط لایو رو توضیح میدم.

ارتباط http معمولی :
1- مرورگر یک درخواست میفرسته به سرور
2- سرور پاسخ رو میفرسته به مرورگر
3- ارتباط از طرف سرور خاتمه می یابد

نکته مهم : مادامی که سرور به ارتباط خاتمه ندهد مرورگر منتظر دریافت اطلاعات می ماند.

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

این از نظر تئوری بود اما باز برای روشن تر شدن موضوع مثال عملی میزنیم.
فرض کنید اون فایل سمت سرور رو می خواهید با php بنویسید.
اول باید محدودیت مدت زمان اجرا رو که به صورت پیش فرض 30 ثانیه هست رو با تابع set_time_limit بردارید.
بعد توی یک حلقه نا محدود بررسی میکنیم اگه پیام جدید بود echo میکنیم و 1 ثانیه sleep میکنیم و بر میگردیم اول حلقه.
با این حساب مادامی که پیام جدیدی موجود نباشه هیچ اطلاعاتی رد و بدل نمیشه.

کد:
  <?
    set_time_limit(0);

    //connect to database here

    while (true) {
      // get latest messages if available

      // if new message is available
      {
        ?>
          <script type="text/javascript">
          document.getElementById('messages').innerHTML += '<?= getLatestMessages() ?><br>';
          </script>
        <?
      }
      flush(); // Ensure the Javascript tag is written out immediately
      sleep(1);
    }
  ?>
 
آخرین ویرایش:

overcrash

Active Member
ممنون علی جان
ولی این ارتباط لایو وقتی برای 300 نفر (کم گفتم؟) همزمان ایجاد میشه
مشکلی بوجود نمیاره؟

(این سرماخوردگی بددردیه :cry: )
 

Ali_Farhadi

Member
overcrash گفت:
ممنون علی جان
ولی این ارتباط لایو وقتی برای 300 نفر (کم گفتم؟) همزمان ایجاد میشه
مشکلی بوجود نمیاره؟

اینو دیگه باید از google بپرسی.

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

برای ما که مشکلی پیش نمیاره چون ما برای پشتیبانی سایتمون میخوایم استفاده کنیم. که بعید میدونم هیچ وقت به بیش از 10 نفر همزمان برسه.
 
آخرین ویرایش:

miladmovie

Active Member
اول اینکه گوگل برای چتش سرور های مخصوص خودش رو داره ! و از این روش های وبی هم استفاده نمی کنه

اگر هم شما می بینید که دارید از وب برای چت کردن استفاده می کنید جریانش چیز دیگری است
یک نمونه رو می تونید در اینجا ببنید : http://www.meebo.com
 

Ali_Farhadi

Member
miladmovie گفت:
اول اینکه گوگل برای چتش سرور های مخصوص خودش رو داره ! و از این روش های وبی هم استفاده نمی کنه

اگر هم شما می بینید که دارید از وب برای چت کردن استفاده می کنید جریانش چیز دیگری است
یک نمونه رو می تونید در اینجا ببنید : http://www.meebo.com

سلام میلاد جان،

من متوجه منظورتون نشدم!!!

مسئله اینجاست که اصلا اینکه اونطرف چیه مهم نیست. یعنی اینکه اونطرف چه php باشه چه asp و چه یک نرم افزار مخصوص که خود گوگل نوشته باشه هیچ فرقی به حال کاربر نمیکنه چون نهایتا اینطرف فقط یک مرورگر هستش و مرورگر تنها کاری که میتونه بکنه برقراری یک ارتباط Http هستش که محدودیتهای خاصی داره و نمیتونه مثل یک نرم افزار messenger ارتباط socket برقرار کنه.

کل بحث سر این مسئله هستش که با توجه به محدودیت های مرورگر یک چت وبی چه طوری کارمیکنه که البته به جواب هم رسیدیم.

در ضمن در مورد meebo هم باید عرض کنم که اون هم یک چت وبی هست و همه محدودیت های گفته شده راجع به اون هم صادق است. پس حتما از یکی از دو روش گفته شده استفاده میکنه.
 

NabiKAZ

Well-Known Member
miladmovie گفت:
اول اینکه گوگل برای چتش سرور های مخصوص خودش رو داره ! و از این روش های وبی هم استفاده نمی کنه

اگر هم شما می بینید که دارید از وب برای چت کردن استفاده می کنید جریانش چیز دیگری است
یک نمونه رو می تونید در اینجا ببنید : http://www.meebo.com

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

نبی
 
مگه ما چند تا تکنولوژی ارتباطی داریم که ندونیم این سایت چه طوری کار می کنه؟
من تو کدهای http://www.meebo.com گشتم.قطعا از ajax استفاده می کنه.خوب Ajax بیخود معروف نشد.
 

Mikhak

Active Member
خوب اینی که از آژاکس استفاده میکنه معلومه ...
چطوری از آژاکس استفاده میکنه .... یعنی بهتره بگیم چطوری تو php میشه استفاده کرد که باید عرض کنم از برنامه نویسی سوکت تو php هم میشه استفاده کرد...
-------------
سینا
 

amir01

Well-Known Member
این meebo.com که کاملا تحت وبه! وب هم برای خودش چهار چوبی داره. فکر نمیکنم راه حل دیگه ای بغیر از این دو روشی که دوستان گفتن داشته باشه!
منم یه سیستم نوشتم مثل پشتیبانی میهن نیک. البته من اسمش رو گذاشتم مشاوره آنلاین چون بره یه مدرسه بود و از آژاکس هم استفاده کردم. تو لینک زیر هست میتونید ببینید.(وارد لینک زیر که شدید روی "ورود به صفحه مشاوره کلیک کنید").
http://aloche.ir/pro/moshaver
یه بخش مدیریت هم داره که مشاورین لوگین میکنن و لیست افرادی که آنلاین هستن براشون نمایش داده میشه.
کاری با مسنجرهای تحت ویندوز ندارم ولی فکر نمیکنم سیستم های چت تحت وب از این دوتا قالب خارج باشن (تا اونجایی که اطلاعاتم یاری میکنه) ولی بازم اهل فن نظرشون رو بگن ما هم استفاده میکنیم.
 

جدیدترین ارسال ها

بالا