عنوان:

‫SignalR - قسمت سوم


نویسنده: یوسف نژاد
تاریخ: ۱۳۹۱/۰۴/۰۲ ۱۶:۳۱
آدرس: www.dntips.ir
در قسمت قبل درباره روشهای برقراری ارتباط با سرور در کتابخونه SignalR کمی بحث شد. برای ادامه بهتره که به برنامه چت ساده ای که تو این مدت کمی تکمیلش کردم یه نگاهی بندازین:
لطف کنین این برنامه رو دانلود و اجرا کنین تا کمی با جزئیات این کتابخونه بیشتر آشنا بشین. این برنامه قدم به قدم نوشته شده و حاوی نسخه‌های مختلفی از برنامه چت هست که هر کدوم تو یه فایل html استفاده شده. نسخه آخر شامل عملیات لاگین، چت گروهی، چت خصوصی و امکان تغییر گروه است. درضمن این برنامه کمی با عجله نوشته شده پس اگه باگ یا موردی مشاهده کردین و یا پیشنهادی دارین اشاره کنین تا بقیه هم استفاده کنن.
حالا به یه نکته در مورد آغاز برقراری ارتباط کلاینت با سرور اشاره میکنم. قبل از برقراری این ارتباط (که در قسمت قبل توضیحاتی در این مورد داده شده) برنامه کلاینت یک درخواست به سمت سرور ارسال میکنه. به تصویر زیر دقت کنین:

به این درخواست اولیه در کتابخونه SignalR همونطور که مشاهده میشه مذاکره (negotiate) گفته میشه. برقراری ارتباط این درخواست اولیه هم توسط XHR انجام میشه. نتیجه این مذاکره در تب Response Body قابل مشاهده است:

می‌بینین که علاوه بر آی دی ارتباط که یک guid است (تلفظ مرسومش «گوئِد» هستش) امکان برقراری ارتباط از طریق روش WebSocket رو هم از طرف سرور مشخص میکنه که با توجه به استفاده من از ویندوز 7 امکانش وجود نداره. یعنی اگر مثلا شما از ویندوز 8 و IIS 8 استفاده کنین مقدار TryWebSocket برابر true بوده و همچنین پارامتر WebSocketServerUrl نال نخواهد بود. البته این پارامتر تنها مربوط به سروره و برنامه کلاینت مورد استفاده (در اینجا یک مرورگر) هم باید توانایی استفاده از این روش رو داشته باشه. پس از اتمام این مذاکره ارتباط اصلی برقرار میشه.

یکی از قابلیتهای خوب این کتابخونه ارسال خطاهای رخ داده در سمت سرور به کلاینت هست. در تصویر زیر بدنه یک نمونه از پاسخهای سرور که نمایش دهنده خطای رخ داده در سمت سرور هست رو نشون داده شده:

برای راحتی دوستان در استفاده از راهنماهای این کتابخونه، یه مقدار کار روشون انجام دادم و با خلاصه کردن محتوای اونا (و کاهش حجم 95 درصدی!) برای استفاده آفلاین آماده کردم:

SignarR github docs.rar 

اگه فرصتی پیش بیاد و دوستان هم علاقه داشته باشن در قسمت بعدی برنامه چت رو بیشتر با هم بررسی میکنیم.

در ادامه قصد دارم تا روی بازدهی و کارایی این کتابخونه تو بار زیاد یه بررسی هایی انجام بدم (البته اگه وقت کنم چون راه اندازی یه محیط تست برا این جور کتابخونه‌ها چندان آسون نیست)  و مطلبی هم در مورد نحوه راه اندازی تست بار ارائه بدم.

نظرات

  • مهمان در ۱۳۹۱/۰۴/۰۲ ۱۷:۱۰
    مرسی آقای یوسف نژاد, امیدوارم این بحثتون ادامه پیدا کنه
  • باربد در ۱۳۹۱/۰۴/۰۳ ۸:۱۱
    خیلی عالی بود ...
    راستش من هم تو فاصله این دو تا مقاله باهاش کار کردم.
    چیز خیلی فوق العاده ایه . البته اگر لطف کنید و دو تا ساختار اصلی این مبحث را که Hubs و Persistent Connection را به تفکیک و با جزئیات توضیح بدید ، خیلی خیلی عالی خواهد بود. (فقط یه سوال؟ تو نسخه بعد دات نت ، جزء ساختار اصلی فریم ورک خواهد بود؟)
    باز هم متشکرم و موفق باشید
    • وحید نصیری در ۱۳۹۱/۰۴/۰۳ ۹:۱۶
      WebSockets Protocol در ASP.NET 4.5 پشتیبانی می‌شود: (^)
      • باربد در ۱۳۹۱/۰۴/۰۳ ۱۰:۳۵
        سپاس :)
  • امیرحسین جلوداری در ۱۳۹۱/۰۴/۰۳ ۱۵:۵۹
    سلام ... عالی بود ... خیلی استفاده بردیم ... برنامه ای که نوشتینم خیلی مفیده ;) ... به نظرم اگه در مورد برنامه ای که نوشتین تو قسمت‌های بعدی سرمایه گذاری کنین خیلی خوب میشه 
  • مهمان در ۱۳۹۱/۱۰/۱۱ ۱۸:۸
    با سلام و خسته نباشید
    واقعا ممنون از مطالبی که گذاشتین. خیلی از مشکلات من رو حل کرد. خواهش می‌کنم بحث رو ادامه بدید.
    با تشکر
  • MSN در ۱۳۹۱/۱۰/۲۲ ۱۷:۲۸
    خیلی خوب و کاربردی , واقعا خسته نباشید.

    سئوال اینجاست , زمانی که پیامی رو ارسال میکنیم دستور زیر رو اجرا میکنیم که این پیام واسه بقیه اعضا هم ارسال بشه
    public void SendMessage(string message, string id)
    {
          Clients.reciveMessage(message, Users[id]);
    }
    زمانی که مثلا توی یک اتاق 10 نفر در یک زمان پیامی رو ارسال میکنند , واسه همه اعضا 10 تا Response جدا میاد ؟ اگه اینطور هست چطور میشه این مورد رو بهینه کرد ؟
  • میثم ق در ۱۳۹۲/۰۲/۱۵ ۱:۱۱

    سلام

    خیلی خوب بود.واقعا دستت درد نکنه

    امیدوارم این بحث و ادامه بدبن

    خیلی ممنون

    • محسن خان در ۱۳۹۲/۰۲/۱۵ ۹:۵۸
      جهت اطلاع؛ دوره SignalR سایت این مباحث رو بر اساس نگارش جدیدترش تکمیل کرده.
  • یوسف نژاد در ۱۳۹۲/۰۲/۱۵ ۱۶:۵۷
    با توجه به ریلیز شدن نسخه نهایی این کتابخونه با عنوان ASP.NET SignalR و تغییرات بوجود اومده، در حال تهیه مطلبی جدید و نیز بروزرسانی برنامه چت ارائه شده و تهیه چند برنامه جدید مفید دیگه هستم که امیدوارم به زودی آماده بشن.