PDA

View Full Version : آپدیت real time مثل فیس بوک



baha_ks
پنج شنبه 10 شهریور 1390, 13:42 عصر
سلام
من میخوام مثل فیس بوک وقتی کامنت یا پیام جدیدی میاد به کاربر نشون بده
من تو اینترنت گشتم بیشتر بر اساس یه مدت زمانی کار میکنن یعنی مثلا بعد از 10 ثانیه میره چک می کنه که آیا اتفاق جدیدی افتاده یا نه ولی نمیخوام بر اساس مدت زمان باشه بلکه هر وقت اتفاق افتاد خود بخود این کا رو انجام بده و بدون بازه زمانی
حالا من مخوام بر اساس Jquery و ASP.NET این کا رو انجام بدم
ممنون میشم راهنمایی کنید

raziee
پنج شنبه 10 شهریور 1390, 17:34 عصر
سلام.
فکر کنم باید از Task , Cashing استفادها کنید.
قبلا در موردش بحث شده . سرچ کنید پیدا میکنید!
@hjran abdpor: صحبت شما ارتباطی با سوال مطرح شده نداره.


من میخوام مثل فیس بوک وقتی کامنت یا پیام جدیدی میاد به کاربر نشون بده
من تو اینترنت گشتم بیشتر بر اساس یه مدت زمانی کار میکنن یعنی مثلا بعد از 10 ثانیه میره چک می کنه که آیا اتفاق جدیدی افتاده یا نه ولی نمیخوام بر اساس مدت زمان باشه بلکه هر وقت اتفاق افتاد خود بخود این کا رو انجام بده و بدون بازه زمانی
حالا من مخوام بر اساس Jquery و ASP.NET این کا رو انجام بدم
ممنون میشم راهنمایی کنید
یعنی چی " هر وقت اتفاق افتاد خود بخود این کا رو انجام بده" یعنی مثلا من برای شما یه کامنت بگذارم برای شما بیاد؟
من با سیستم شخصیم هستم و شما با سیستم شخصی خودتون.
یعنی دو تا کامیوتر جداگانه، دو تا اتصال جداگانه و دو تا درخواست جدا گانه.
وقتی که درخواستی از طرف کلاینت به سرور میره درواقع یک Request اتفاق می افته و تا زمان تکمیل شدن این درخواست و ارسال پاسخ از سرور به کلاینت، ارتباطی بین کلاینت و سرور وجود داره.
بعد از پایان این فرایند کلاینت با سرور دیگه ارتباطی نداره و اگه در سرور اتفاقی بی افته(کامنت جدیدی ثبت بشه و اطلاعات تغییر کنه) دیگه سرور نمیتونه اطلاعات جدید رو به کلاینت برگردونه!!!
خوب پس باید چه کار کرد تا کلاینت از تغییرات در داده ها مطلع بشه؟
جوابش اینه که باید از طرف کلاینت یه در خواست جدید به سرور فرستاده بشه.
خوب تو اینجا نمی خواهیم که کاربر Refresh کنه پس درخواست باید بوسیله آیجکس فرستاده بشه.
شما بوسیله برنامه نویسی سمت کلاینت(مثلا به کمک Jquery) به صورت مرتب درخواستی برای بررسی وضعیت به سرور بفرستید. و خوب همونطور که خودتون هم گفتید یک تاخیر هم بین هر درخواست هست.

prankster
پنج شنبه 10 شهریور 1390, 18:55 عصر
چیزی که facebook و یا وبسایت هایی مثل gamil از آن استفاده می کنند اصطلاحا Server Pushing یا Comet نامیده می شود، در این روش کلاینت با استفاده از یک XHR Object (درخواست ajax) به صورت asynch درخواستی را برای سرور می فرستد، سرور thread پردازش کننده درخواست را اصطلاحا به حالت sleep می برد و جوابی را به کلاینت ارسال نمی کند، درخواست کلاینت در حالت pending باقی می ماند. هنگامی که مثلا پیغام خاصی برای کلاینت ارسال می شود، سرور thread درخواست کلاینت را به جریان می اندازد و جواب برای کلاینت ارسال می شود. کلاینت سپس در خواست جدیدی از نوع قبل برای سرور ارسال می کند و چرخه قبل تکرار می شود. با این روش اینگونه به نظر می آید که سرور به صورت live برای کلاینت در وقفه های مورد نظر اطلاعاتی را ارسال می کند.
اطلاعات بیشتر:
http://en.wikipedia.org/wiki/Comet_%28programming%29

استفاده از comet نیاز به دانش وسیع در مورد مدیریت threading و نحوه کار asp pipeline و همچنین سخت افزار های قوی دارد، همچنین از آنجا که تعداد thread های مورد استفاده در asp.net برای یک web application محدود است نیاز به load balancing و chain کردن application ها اجتناب ناپذیر است

برای پیاده سازی سیستم real time پیام رسانی از روش های متنوعی می توان استفاده کرد. مثلا تکنولوژی server puling که دوستان در بالا اشاره کردند روش بدون هزینه و معمول تری است.
روش دیگر استفاده از plug-in هایی است که از socket پشتیبانی می کنند مثل flash و یا silverlight. روشی که مثلا yahoo mail از آن استفاده می کند. در این روش یک object مثلا flash در ابعاد بسیار کوچک در سایت قرار داده می شود و مدیریت socket را به عهده می گیرد، application server های بسیار قدرتمندی برای مدیریت socket در سمت سرور وجود دارند برای مثال:
http://www.adobe.com/products/flashmediaserver (http://www.adobe.com/products/flashmediaserver/)

همچنین در صورتی نسخه های جدید مرورگر هایی مثل firefox یا chrome که از HTML5 پشتیبانی می کنند مد نظر باشد می توان از WebSocket استفاده کرد که جزیی از خصوصیات HTML5 است:
http://en.wikipedia.org/wiki/WebSocket
مثال هایی که من برای پیاده سازی Application Server برای مدیریت WebSocket دیده ام عمدتا با استفاده از Python و یا JAVA است! احتمالا با استفاده از Net. و پیاده سازی یک Application در سمت سرور برای مدیریت درخواست های TCP هم می توان نتیجه گرفت که همه نیاز به نصب برنامه روی سرور دارند.
شاید از IIS7 WAS و یا یک WCF Service از نوع TCP و نصب آن در IIS هم بتوان نتیجه گرفت، در این صورت نیاز به نصب برنامه روی سرور نیست! البته در این مورد مطمئن نیستم، از دوستان کسی تجربه ای دارد؟

baha_ks
چهارشنبه 16 شهریور 1390, 11:51 صبح
سلام و خیلی ممنون از شما دوستان که جواب دادین
خدمت جناب رضیئی باید عرض کنم فر مایشتون درست ولی چیزی که من مد نظرم بود رو جناب prankster گفتن
اینا نمونه هایی هستن که تو codeproject پیدا کردم
http://www.codeproject.com/KB/aspnet/wxv_comet.aspx
http://www.codeproject.com/KB/WCF/PushMsgRESTfulWCF.aspx
http://www.codeproject.com/KB/aspnet/SandBox_CometSample.aspx
http://www.codeproject.com/KB/custom-controls/CometMultiClient.aspx
http://www.codeproject.com/KB/aspnet/CometGrid.aspx