معرفی کامل SignalR
معرفی کامل SignalR
SignalR یک کتابخانه برای توسعه برنامههای وب به صورت Real Time است. فناوری SignalR یکی از فناوری های ابداع شده توسط مایکروسافت است که استفاده از WebSocket را بسیار راحت می کند. توسط WebSocket می توان ارتباط نامتقارن پایدار ایجاد کرد به این معنی که پس از ارسال اطلاعات ارتباط قطع نمی شود و ادامه پیدا می کند.
جالب اینکه SignalR یک کتابخانه open source است.
معرفی کامل SignalR
SignalR یک کتابخانه برای توسعه برنامههای وب به صورت Real Time است. فناوری SignalR یکی از فناوری های ابداع شده توسط مایکروسافت است که استفاده از WebSocket را بسیار راحت می کند. توسط WebSocket می توان ارتباط نامتقارن پایدار ایجاد کرد به این معنی که پس از ارسال اطلاعات ارتباط قطع نمی شود و ادامه پیدا می کند.
جالب اینکه SignalR یک کتابخانه open source است.
روشهای گوناگون برای پیاده سازی برنامه های وب Real Time در سیگنالآر
تکنولوژی جدید WebSocket که در دات نت 4.5 به طور کامل پشتیبانی می شود.
روش دیگر Server-sent Events نام دارد که دادههای جدید را به فرم رویدادهای DOM به سمت کلاینت میفرستد.
روش بعدی به Forever Frame است که در این روش یک iframe مخفی درون کد html مسئول تبادل دادههاست. این iframe مخفی بهصورت یک بلاک Chunked به سمت کلاینت فرستاده میشود. این iframe که مسئول رندر دادههای جدید در سمت کلاینت است ارتباط خودش را با سرور تا ابد حفظ میکند. هنگامی که رویدادی سمت سرور رخ میدهد با استفاده از این روش دادهها بهصورت تگهای script به این فریم مخفی فرستاده میشوند و چون مرورگرها محتوای html رو به صورت افزایشی (incrementally) رندر میکنند بنابراین این اسکریپتها بهترتیب زمان دریافت اجرا میشوند.
روش آخر long-polling نام دارد. در روش polling معمولی پس از ارسال درخواست توسط کلاینت، سرور بلافاصله نتیجه حاصله را به سمت کلاینت میفرستد و ارتباط قطع میشود.
اما در روش long-polling پس از برقراری ارتباط کلاینت با سرور این ارتباط تا مدت زمان معینی (که توسط یه مقدار time out مشخص میشود و مقدار پیشفرضش 2 دقیقه است) برقرار می ماند. بنابراین کلاینت میتواند بدون ایجاد مشکلی در کارایی، دادههای جدید را از سرور دریافت کند. به این روش در برنامهنویسی وب اصطلاحا برنامهنویسی کامت (Comet Programming) می گویند.
SignalR به طور خودکار مدیریت اتصال را مدیریت می کند و به شما این امکان را می دهد که پیام ها را به طور همزمان به تمامی مشتریان متصل، مانند یک اتاق چت، پخش کنید. شما همچنین می توانید پیام های خود را به مشتریان خاص ارسال کنید. ارتباط بین سرویس گیرنده (کلاینت) و سرور، بر خلاف یک اتصال HTTP کلاسیک، که برای هر ارتباط برقرار شده است، پایدار است.
- توضیح پاراگراف بالا در یک خط - Connection بین کلاینت و سرور به صورت persistent (مداوم) است و این کار متضاد با HTTP است که مدام بین کلاینت و سرور قطع خواهد شد.
SignalR از قابلیت server push پشتیبانی می کند. در این قابلیت کد درون سرور می تواند کد درون کلاینت که طبیعتا درون Browser قرار دارد را به وسیله Remote Procedure Calls (RPC) فراخوانی کند این طبیعتا برعکس روش وب امروزی است که کلاینت سرور را صدا می زند (request-response).
SignalR برای برقراری ارتباط ابتدا بررسی میکند که آیا هر دو سمت سرور و کلاینت قابلیت پشتیبانی از WebSocket را دارند. در غیراینصورت سراغ روش Server-sent Events میرود. اگر باز هم موفق نشد سعی به برقراری ارتباط با روش forever frame میکند و اگر باز هم موفق نشد در آخر سراغ long-polling میرود.
Transport selection process
در اینجا فرایند انتخاب روش ارسال و دریافت توسط SignalR مشخص شده است.
1. اگر Browser کاربر IE8 یا قدیمی تر باشد، از روش Long Polling استفاده می شود.
2. اگر JSONP تنظیم شده باشد (JSONP پارامتری است که هنگامی که Connection شروع می شود مقدار آن true می شود) Long Polling استفاده می شود.
3. اگر شما از یک Cross-Domain استفاده کنید (یعنی Endpoint SignalR در همان دامینی که web page است قرار ندارد)، WebSocket برای تعیین روش ارسال و دریافت، اطلاعات زیر را چک می کند:
4. کلاینت از (Cross-Origin Resource Sharing) CORS پشتیبانی می کند.
5. کلاینت از WebSocket پشتیبانی می کند.
6. سرور از WebSocket پشتیبانی می کند.
اگر هر یک از این شرایط محیا نشود، برای ارسال و دریافت از روش Long Polling استفاده می شود.
7. اگر JSONP تنظیم نشده باشد و Connection به صورت Cross-Domain نباشد، WebSocket مورد استفاده قرار خواهد گرفت به شرطی که کلاینت و سرور از آن پشتیبانی کنند.
8. اگر سرور و کلاینت WebSocket را پشتیبانی نکنند، در صورت در دسترس بودن از Server Sent Events استفاده می شود.
9. اگر Server Sent Events در دسترس نباشد از Forever Frame استفاده می شود.
10. اگر Forever Frame در دسترس نباشد از Long Polling استفاده می شود
"منتشر شده در سایت ABLY"
reyhane
سلام وقتتون بخیر من یه پروژه پیاده سازی کردم که توی اون ارتباط بلادرنگ کاربر وب و کاربر اندروید رو فراهم کردم اما مشکلم اینجاست که وقتی کاربر اندروید برنامه رو میبنده ظاهرا ارتباط قطع میشه و دیگه پیامی دریافت نمیکنه. شما میدونین راهی برای این مشکل وجود داره یا نه؟
مدیروب سایت
سلام دوست عزیز. شما یاید از سرویس ها استفاده کنید تا هنگام بستن برنامه ارتباطتون قطع نشود