دوره آموزشی SignalR به زبان فارسی
بسم الله الرحمن الرحیم
دوره آموزشی SignalR به زبان فارسی
آموزش SignalR بخش دوم
لطفا صبور باشید در بخش های بعد به سراغ برنامه نویسی SignalR برویم.
بخش پنجم- شروع ایجاد پروژه SignalR
بخش ششم - مروری بر مفاهیم SignalR
بخش هفتم- ایجاد پروژه Chat با SignalR
بخش هشتم - ایجاد پروژه Chat با SignalR در ASP.NET MVC
بخش نهم- ساخت یک Timer سمت سرور با SignalR
بخش دهم - آموزش ساخت یک پروژه SignalR با SQLDepedency در ASP.NET MVC
بسم الله الرحمن الرحیم
دوره آموزشی 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 استفاده می شود.
Sobhan
سلام..... و درود فراوان خیلی ممنون از مقالتون اموزش فارسی اصلا گیر نمیاد خسته نباشید واقعن
مدیروب سایت
سلام دوست عزیز.
خوشحالیم که این مقاله مورد پسند شما واقع شده است.
موفق باشید