a

ABLY مقالات و مطالب مجموعه

دوره  آموزشی SignalR به زبان فارسی

دوره آموزشی SignalR به زبان فارسی

بسم الله الرحمن الرحیم

 

دوره  آموزشی SignalR به زبان فارسی

آموزش SignalR بخش دوم

 

لطفا صبور باشید در بخش های بعد به سراغ برنامه نویسی SignalR برویم.

 

 

بخش اول
بخش دوم

بخش سوم

بخش چهارم

بخش پنجم- شروع ایجاد پروژه SignalR

بخش ششم - مروری بر مفاهیم SignalR

بخش هفتم- ایجاد پروژه Chat با SignalR

بخش هشتم - ایجاد پروژه Chat با SignalR در ASP.NET MVC

بخش نهم- ساخت یک Timer سمت سرور با SignalR

بخش دهم - آموزش ساخت یک پروژه SignalR با SQLDepedency در ASP.NET MVC

 

SignalR

SignalR برای انتقال در جاهایی که امکان آن باشد، از روش جدید WebSocket استفاده می کند در صورتی که نتواند از این امکان استفاده کند هوشنمندانه از روش های قدیمی استفاده می کند.
ممکن است شما بخواهید در برنامه خود که از SignalR استفاده می کند، حتما از روش WebSocket برای انتقال استفاده کنید در این زمان شما باید قابلیتهایی که قبلا برای شما طراحی شده است را پیاده سازی و از آن استفاده کنید.
این قابلیت بسیار مهمی است که شما می توانید با استفاده از ابزار SignalR از مزایای WebSocket برای انتقال اطلاعات استفاده کنید در صورتی که هیچ نگرانی برای پیاده سازی برنامه خود برای کلاینت هایی که قابلیت پشتیبانی WebSocket  را ندارند، ندارید و هیچ نیازی به نوشتن ابزار و کد متفاوت برای کلاینت های مختلف نیست.
همچنین با توجه به update شدن و پیشرفت تکنولوژی ها شما هیچ نگرانی در مورد تغییراتی که در آینده ایجاد خواهد شد نخواهید داشت زیرا SignalR از WebSocket  به روز رسانی شده پشتیبانی خواهد کرد و این تغییرات در لایه ی انتقال transport اتفاق خواهد افتاد.
هنگامی که شما نیاز دارید برای برنامه خود دقیقا از روش WebSocket  استفاده کنید، SignalR قابلیت هایی که شما نیاز خواهید داشت در اختیارتان قرار می دهد، شبیه fallback به دیگر transport ها و یا بازبینی و بررسی برنامه شما برای برزورسانی پیاده سازی WebSocket.

 

Transports and fallbacks

SignalR یک انتزاع، بین برخی از transport هایی است که نیازمندند به صورت real-time بین کلاینت و سرور کار کنند.
خیلی جالب است، کانکشن SignalR همانند یک HTTP آغاز می شود و در صورتی که کانکشن WebSocket در دسترس باشد به آن تبدیل خواهد شد.
WebSocket ایده آل ترین روش انتقال برای SignalR است زیرا بهترین استفاده از حافظه سرور، کمترین تاخیر و دارای ویژگی های زیربنایی دیگری همچون استفاده از ارتباطfull duplex  بین کلاینت و سرور است.
در مورد ارتباطfull duplex  قبلا در دوره WCF صحبت شد، اما مختصرا انواع ارتباط به سه گروه یک طرفه تقاضا دهنده، یک طرف پاسخ دهنده و دو طرفه تقسیم می شود منظور از ارتباطfull duplex  ارتباط دو طرفه کامل است.
اما برای استفاده از ویژگی WebSocket در SignalR می بایست شرایطی را مهیا کرد، برای این ویژگی باید از ویندوز سرور 2012 یا ویندوز 8 به همراه NET 4.5. استفاده شود در غیر این صورت SignalR از روش انتقال قدیمی استفاده خواهد کرد!.
HTML 5 transports
این روش انتقال نیازمند پشتیبانی شدن از HTML5 است، در صورتی که کلاینت از HTML5 پشتیبانی نکند روش انتقال SignalR به روش قدیمی تر تبدیل خواهد شد.

 


WebSocket

اگر سرور و Browser هر دو نشان دهند که می توانند از WebSocket پشتیبانی کنند، ارتباط دوطرفه بین کلاینت و سرور یک ارتباط مداوم و فقط بر اساس WebSocket است. با این حال WebSocket دارای نیازمندی های سختی است، که فقط آخرین نسخه مرورگر قدرتند IE، Google Chrome, Mozilla Firefox و سایر مرورگرهایی چون Opera و Safari این ویژگی را پشتیبانی می کنند اما نه به صورت کامل.
Server Sent Events
که نیز EventSource شناخته می شود، همه مرورگرها آن را پشتیبانی می کنند به جز مرورگر قدرتمند IE.
 

نقل و انتقال پیوسته (Comet transports)

Comet  یک روش برنامه نویسی در Application Web است که سرور اطلاعاتی را درون browser، Push می کند این اطلاعات بدون درخواست Browser و کلاینت از سمت سرور ارسال می شود. این روش برنامه نویسی با وب پایه متفاوت است.

•    Forever Frame     (فقط برای مرورگر قدرتمند IE). ابتدا یک IFrame مخفی ایجاد می کند و یک درخواست به سرور ارسال می کند. سرور به صورت پیوسته داده هایی که سریعا قابل اجرا است را به کلاینت ارسال می کند تا یک ارتباط one-way realtime  از طریق سرور با کلاینت برقرار شود. در اینجا ارتباط بین سرور و کلاینت با ارتباط کلاینت با سرور از طریق دو Connection جدا برقرار می شود دقیقا مشابه ساختار Request HTML (تمامی وب سایت های عادی) که برای هر قسمت از داده ها که نیاز به ارسال دارد یک  Connectionایجاد می شود.
•    Ajax long polling
Long polling یک اتصال مداوم را ایجاد نمی کند. اما به جای Poll، سرور تا زمانی که بتواند پاسخ درخواست را بدهد باز می ماند و در زمانی که Connection قطع شود با ارسال یک درخواست سریع Connection مجددا ایجاد می شود. این روش تاخیری را در زمان Reset شدن Connection ایجاد خواهد کرد.
این روش در واقع می خواهد روش ایجاد یک Connection دائمی را به شکلی باز سازی کند و برای این باز سازی سعی دارد با ارسال درخواست و بزرگتر کردن poll اینکار را انجام دهد. برای درک بهتر، این روش را با افزایش زمان Session و Refresh خودکار صفحات می توانید تجربه کنید.

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

 

Transport selection process

در اینجا فرایند انتخاب روش ارسال و دریافت توسط SignalR مشخص شده است.
1.    اگر Browser کاربر IE8 یا قدیمی تر باشد، از روش Long Polling استفاده می شود.
2.    اگر JSONP تنظیم شده باشد (JSONP پارامتری است که هنگامی که Connection شروع می شود مقدار آن true می شود) Long Polling استفاده می شود.
3.    اگر شما از یک Cross-Domain استفاده کنید (یعنی Endpoint SignalR در همان دامینی که web page است قرار ندارد)، WebSocket برای تعیین روش ارسال و دریافت، اطلاعات زیر را چک می کند:
a.    کلاینت از (Cross-Origin Resource Sharing) CORS  پشتیبانی می کند.CROS یعنی به اشتراک گذاری منابع برای دیدن اطلاعات بیشتر در این مورد می توانید به این مقاله مراجعه کنید.
b.    کلاینت از WebSocket پشتیبانی می کند.
c.    سرور از WebSocket پشتیبانی می کند.
اگر هر یک از این شرایط محیا نشود، برای ارسال و دریافت از روش Long Polling استفاده می شود.
4.    اگر JSONP تنظیم نشده باشد و Connection به صورت Cross-Domain نباشد، WebSocket مورد استفاده قرار خواهد گرفت به شرطی که کلاینت و سرور از آن پشتیبانی کنند.
5.    اگر سرور و کلاینت WebSocket را پشتیبانی نکنند، در صورت در دسترس بودن از Server Sent Events استفاده می شود.
6.    اگر Server Sent Events در دسترس نباشد از Forever Frame استفاده می شود.
7.    اگر Forever Frame در دسترس نباشد از Long Polling استفاده می شود.
 

نظرات

  • Hannah Martinez
    Sobhan
    دو شنبه 11 دی 1278 0:00

    سلام..... و درود فراوان خیلی ممنون از مقالتون اموزش فارسی اصلا گیر نمیاد خسته نباشید واقعن

    • Judith Bell
      پاسخ
      دو شنبه 11 دی 1278 0:00

      سلام دوست عزیز.

      خوشحالیم که این مقاله مورد پسند شما واقع شده است.

      موفق باشید

نظرات یا سوالات خودرا با ما درمیان بگذارید

0912 097 5516 :Phone Number
0713 625 1757 :Phone Number