لود شدن بدون ارسال درخواست به سرور از سمت کاربر

greencat

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

Masoud1365

مدیر انجمن
این هم دقیقا مثل همون 30 ثانیه هست که گفتید اما یه فرق داره ! به جای 30 ثانیه زمان کمتری رو قرار میدن ( مثلا5 ثانیه ) بعد چک میشه که آیا اطلاعات ججدید که شما نخوندید اضافه شده یا نه اگه نه که هیچی اگر هم آره اون موقع رفرش میشه یا مثلا داخل یه div یه چیزی اضافه میشه !
 

greencat

Member
ممنون از پاسختون اما فکر کنید به ازای هر کاربری که توی سایت باشه هر 5 ثانیه به 5 ثانیه یه درخواست به سمت سرور فرستاده بشه!!!! می‌دونید چی میشه!؟ و چقدر درخواست فرستاده میشه؟!! به نظر باید راه حل بهتری هم باشه.
مثل توی نرم افزار‌های چت که با php نوشته شده برای اینکه ببینیم طرف پیغام جدیدی فرستاده یا نه اگر بهخواهیم 1 ثانیه به 1 ثانیه درخواست بدیم و چک کنیم و درصورت فرستاده شده بودن پیغام از طرف مقابل پیغام اون رو به فر مورد نظر بدیم که دیگه فاجعه میشه!!
به نظر این دو سیستم یه جور کار می‌کنند یعنی این مکانیزم چت و این مکانیزمی که فیس بوک در نظر گرفته و روال کارشون باید یه جور باشه.
چون وگرنه فکر کنید فیس بوک میلیونی کاربر آنلاین داره و هر چند ثانیه به چند ثانیه هر کاربری بخواد درخواست به سمت سرور بفرسته که ببینه آپدیت کنه یا نه اونوقت میدونید چه بلایی سر سرور‌های فیس بوک میادش؟حالا هر چند صدتا سرور هم که می‌خواد داشته باشه.
به نظر این راه معولی نیستش و باید راه حل بهتر و بهینه تری هم باشه.
نظر دیگه‌ای ندارید؟
ممنون.
 

ziXet

مدیر انجمن PHP/MYSQL
ممنون از پاسختون اما فکر کنید به ازای هر کاربری که توی سایت باشه هر 5 ثانیه به 5 ثانیه یه درخواست به سمت سرور فرستاده بشه!!!! می‌دونید چی میشه!؟ و چقدر درخواست فرستاده میشه؟!! به نظر باید راه حل بهتری هم باشه.
مثل توی نرم افزار‌های چت که با php نوشته شده برای اینکه ببینیم طرف پیغام جدیدی فرستاده یا نه اگر بهخواهیم 1 ثانیه به 1 ثانیه درخواست بدیم و چک کنیم و درصورت فرستاده شده بودن پیغام از طرف مقابل پیغام اون رو به فر مورد نظر بدیم که دیگه فاجعه میشه!!
به نظر این دو سیستم یه جور کار می‌کنند یعنی این مکانیزم چت و این مکانیزمی که فیس بوک در نظر گرفته و روال کارشون باید یه جور باشه.
چون وگرنه فکر کنید فیس بوک میلیونی کاربر آنلاین داره و هر چند ثانیه به چند ثانیه هر کاربری بخواد درخواست به سمت سرور بفرسته که ببینه آپدیت کنه یا نه اونوقت میدونید چه بلایی سر سرور‌های فیس بوک میادش؟حالا هر چند صدتا سرور هم که می‌خواد داشته باشه.
به نظر این راه معولی نیستش و باید راه حل بهتر و بهینه تری هم باشه.
نظر دیگه‌ای ندارید؟
ممنون.
اصولا باید به این نکته توجه کنید که پروتوکل http یک پروتوکل request-response هست! یعنی به ازای هر درخواست یک پاسخ دریافت خواهید کرد!
بنابراین هیچ راه حل دیگه ای به جز ارسال درخواست با زمانی بندی مناسب نداره.
اون افزایش زمان پست ها و کامنت ها و... تو فیسبوک به نظر نمیاد کار سرور باشه! یعنی خود جاوااسکریپت این کارو انجام میده و هیچ درخواستی به ازای اون فرستاده نمیشه
ولی برای چت و سایر تغییرات فیسبوک هر 10 ثانیه درخواست ارسال میکنه
برای اینکه مطمئن شید هم یه افزونه به اسم httpfox رو روی فایرفاکس نصب کنید تا همه درخواستها رو بتونید رصد کنید

موفق باشید
 

masima

Member
نظر من اینه، شاید درست نباشه:
این فناوری ajax و میشه اون رو طوری قرار داد که تنها یک کد کوچک و یک قسمت کوچک از صفحه همیشه یا حداقل هر چند ثانیه یکبار با سرور در حال تماس باشه و درخواستی هم که میفرسته در حد چند بایت یا کیلو بایت هست و توان زیادی از سرور رو اشغال نمیکنه!

اون افزایش زمان پست ها و کامنت ها و... تو فیسبوک به نظر نمیاد کار سرور باشه! یعنی خود جاوااسکریپت این کارو انجام میده و هیچ درخواستی به ازای اون فرستاده نمیشه
منم موافقم!
 

eAmin

Well-Known Member
در Ajax روشی وجود داره به نام Comet در این روش یک درخواست برای سرور ارسال میشه (در حقیقت دو درخواست) وقتی request به سرور فرستاده شد شما بصورت معمولی جواب رو از سرور دریافت میکنید. وقتی جواب رو دریافت کردید بصورت خودکار یک درخواست دیگه به سرور فرستاده میشه تا کانکشن باز بمونه و هیچ پاسخی به کلاینت ارسال نمیشه (در سمت سرور باید پیاده سازی بشه) حالا با توجه به اینکه ما یک درخواست از قبل به سرور فرستادیم و هنوز جوابی از اون دریافت نکردیم، به محض اینکه در سرور اطلاعات به روز بشن جواب اون درخواست به کاربر ارسال میشه و به همین ترتیب این چرخه ادامه داره.
ولی خب این روش هم خیلی بهینه نیست، یعنی از اینکه درخواستی رو در بازه های زمانی مختلف بفرستیم بهتره ولی هنوز هم بهینه نیست، به همین دلیل در html5 یک تکنولوژی جدیدی ارائه شده به نام WebSocket که مشکلات این روش رو برطرف کرده و از این روش کاملا بهینه تر هست.

facebook هم از همین روش استفاده کرده بصورتی که یک کانکشن باز از طریق ای جکس ایجاد میکنه و به محض update شدن، اطلاعات از سرور به کاربر ارسال و نمایش داده میشه.

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

greencat

Member
ممنون از همه دوستان و پاسخ‌هاشون.
اصولا باید به این نکته توجه کنید که پروتوکل http یک پروتوکل request-response هست! یعنی به ازای هر درخواست یک پاسخ دریافت خواهید کرد!
با این حرف شما موافقم اما خوب فرستادن این همه درخواست هم به نظر کار عاقلانه‌ای نمیادش!
به نظر این روشی که eAmin جان گفتن روش مناسب و خوبی هستش و حداقل بهینه تر از روش‌های قبلی.
من یه تستی انجام دادم با فایرفاکس Javascript رو غیرفعال کردم و بعدش صفحه‌ی فیس بوک رو باز کردم ( یکی دیگه از شگفتی‌های فیس بوک این هستش که تقریبا تمامی کارها رو در حالتی که جاوا اسکریپت هم غیر فعال باشه میشه انجام دادش!!!) و مثل دفعه قبل صفحه رو لود کردم و همه چیز رو ثابت گذاشتم حتی حرکت موس تا ببینم باز هم این اتفاق میوفته یا نه و در کمال ناباوری دیدم که بله! یعنی بدون ای جکس هم این عمل انجام میشه اما خوب هیچ وقت مرورگر به طور کامل به حالت لود پایدار نرسید و مدام درحال دریافت و ارسال اطلاعات بود، به احتمال زیاد زمانی که javascript فعال باشه از همون روشی استفاده شده که eAmin جان گفتن اما وقتی که js غیر فعال هستش انجام شدن این اتفاقات کمی جای تامل داره!
eAmin جان اگر منبع دیگه‌ای هم داشتید لطفا اینجا معرفی کنید .
حداقلش الان یه سرنخ و نقطه شروع پیدا کردم:wink:
ممنون.
 

eAmin

Well-Known Member
یک مورد دیگه ای که یادم رفت بگم، اینکه در این روش شما تنها محدود به استفاده از ای جکس نیستید، یعنی با استفاده از iFrame ها هم میتونید این روش رو پیاده سازی کنید.
اگر به فکر پیاده سازی Comet افتادید این لینک رو برای اطلاعات بیشتر مطالعه کنید.
 

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

بالا