نمایش نتایج 1 تا 6 از 6

نام تاپیک: SignalGo ارتباط امن، سریع، و راحت با خوانایی کد بالاتر بین کلاینت و سرور...

  1. #1

    Lightbulb SignalGo ارتباط امن، سریع، و راحت با خوانایی کد بالاتر بین کلاینت و سرور...

    سلام.

    پروژه ی SignalGo چیست؟
    سیگنال Go پروژه ای هست که ارتباطات بلادرنگ (Real-Time) رو برای برنامه نویسان سرور و کلاینت فراهم میکنه.

    به این صورت که سرور بر حسب یک ادرس و پورت خاص اجرا میشه و کلاینت ها با استفاده از همون آدرس به اون سرور متصل میشن و داده ارسال میکنند و داده دریافت میکنند.این ارتباط کاملاً Duplex یعنی دو طرفه می باشد.
    پروژه هایی نظیر SignalR و WCF هم در مجموعه ی این نوع پروژه ها قرار میگیرن.

    چرا ما شروع کردیم به نوشتن SignalGo ؟

    اولین مشکل ما ارتباط سخت بین کلاینت و سرور در جاوا و سی شارپ بود.برنامه نویسان شرکت ما که جاوا کار بودند بسیار براشون سخت بود که به سرور دات نت با سیگنال R وصل شن و منیج کردن کد ها و مشکلات تبدیل کد و هندل کردن به وجود میومد که مارو بر این کرد تا این سیستم رو از پایه طراحی کنیم.

    پروژه ی سیگنال Go یک پروژه ی Open Source و متن باز هست که طراحی و معماری اون به شکلی انجام شده که سرعت انجام کار و تبادل اطلاعات رو چندین برابر بیشتر میکنه و اطمینان بیشتری به برنامه نویس میده.

    برتری های SignalGo نسبت به SignalR در چیست؟

    1.دسترسی دقیقتر به کلاینت ها مثل WCF
    2.تضمین کردن رسیدن اطلاعات به دست کلاینت (همچنین برعکس)
    3.دریافت خروجی از کلاینت زمانی که توابع کلاینت صدا زده میشود.
    4.سرعت بیشتر
    5.کد تمیز تر با خوانایی بیشتر
    6.قابلیت آپلود و دانلود Stream
    7.قابلیت ارتباط UDP برای انتقال صوت و تصویر

    برتری های SignalGo نسبت به WCF در چیست؟

    1.کراس پلتفرم بودن در حالی که WCF مخصوص ویندوز طراحی شده.
    2.منیج راحت تر، تنظیمات کمتر و سرعت بیشتر.

    در حال حاضر سرور و کلاینت دات نت و کلاینت جاوا SignalGo در github در دسترس هست.

    سورس سرور و کلاینت:

    https://github.com/SignalGo/SignalGo-full-net

    سورس کلاینت جاوا:
    https://github.com/SignalGo/client-java


    نصب از طریق nuget:

    نسخه ی سرور

    نسخه ی کلاینت

    نسخه ی جاوا اسکریپت


    سمپل و مثال کار با سیگنالگو

    پروژه ی تست توابع سرور
    آخرین ویرایش به وسیله Hamishebahar : چهارشنبه 11 بهمن 1396 در 12:04 عصر

  2. #2

    نقل قول: SignalGo ارتباط امن، سریع، و راحت با خوانایی کد بالاتر بین کلاینت و سرور...

    نسخه ی 2 سیگناگو منتشر شد، امکانات:
    1.ساپورت کامل دات نت 3.5 ، 4.0 ، 4.5 و دات نت استاندارد 1.6 و دات نت 1.1 Core
    2.قابلیت اپلود فایل با استفاده متد Http Post بدون کش کردن دیتا ها در دیسک یا حافظه این یعنی اینکه شما یک فایل 10 گیگی رو هم میتونید با Http post اپلود کنید و همزمان که فایل داره از طرف کلاینت میاد دیتا هاشو بخونید
    3.رفع باگ و بهینه سازی سیستم.

    https://github.com/SignalGo/SignalGo-full-net

    نرم افزار تست سیگنال گو:

  3. #3

    نقل قول: SignalGo ارتباط امن، سریع، و راحت با خوانایی کد بالاتر بین کلاینت و سرور...

    سلام، نسخه ی جدید سیگنال گو منتشر شده، توی این نسخه یه قابلیت اضافه شده که برای هر متد که برای سرور مینویسید به صورت جداگونه میتونید بگید خروجی های پروپرتی های کلاستون برای کلاینت چی باشه بدون اینکه مدل جدیدی بسازید مثلا شما یک مدل دارید که 40 تا پروپرتی داره در حالی که کلاینت شما فقط به 5 تای اون نیاز داره با استفاده از این قابلیت فقط میتونید اون 5 تا پروپرتی رو برای کلاینت ارسال کنید.




    توی این مثال برای کلاس ProfileInfo مشخص کردیم که در هنگام خروجی برای کلاینت ها فقط این سه تا پروپرتی ارسال بشن، البته همیشه لازم نیست پروپرتی ها رو به صورت متنی اینجوری بهش بدید میتونید یک اینترفیس هم بهش ورودی بدید.

    همچنین امکان اضافه شده صفت InstanceType هست که باعث میشه شما سمت سرور مشخص کنید به ازای هر کلاینت کلاس سرویس شما دوباره سازی بشه یا نه.
    در صورتی که InstanceType برابر SingleInstance باشه به ازای هر کلاینت سرویس شما instance یا دوباره سازی نمیشه و یک سرویس برای همه ی کلاینت ها توی حافظه ساخته میشه و اگر مقدار اون برابر با MultipeInstance باشه کلاس سرویس ها به ازای هر کلاینت دوباره سازی خواهد شد.
    مثال:


  4. #4

    نقل قول: SignalGo ارتباط امن، سریع، و راحت با خوانایی کد بالاتر بین کلاینت و سرور...

    نسخه ی جدید سیگنالگو با امکانات زیر منتشر شد:
    1.ساپورت async و await برای صدا زدن توابع سرور از طرف کلاینت:
    از این پس براحتی میتونید توابع سرور رو با قابلیت جدید دات نت یعنی async await صدا بزنید و براحتی خروجی بگیرید بعنی توابعتون رو توی ترد جداگونه اجرا کرده بدون اینکه UI شما freez بشه یا هنگ کنه.



    مثلا فقط کافه نوع خروجی تابعتون رو داخل <Task<T بذارید و انتهای اسم تابعتون رو Async بذارید البته میتونید توابع sync رو بطور کامل از توی اینترفیس بردارید و فقط Async ها رو برای کلاینت بذارید.

    2.سریالایز و دیسریالایز کردن هر نوع آبجکتی که json ساپورت نمی کنه. مثلا شما نمیتونید توی SignalR یا هر نوع سیستم سرور کلاینتی ای که از json برای عملیات سریالایز استفاده میکنه هر نوع آبجکتی رو که میخواید از کلاینت به سرور یا بالعکس ارسال کنید.
    مثلا شما یک آبجکتی دارید از نوع System.Drawing.Bitmap و این آبجکت قابلیت سریالایز شدن رو عملا نداره.



    اگر این مدل شما باشه و یکی از پروپرتی هاش Bitmap باشه نیازی نیست به مدلتون دست بزنید فقط کافیه طریقه ی سریالایز و دیسریالایز کردن این آبجکت رو به سیگنالگو بگید.



    به این شکل، توی رویداد HandleSerializingObject دو نوع ورودی مشخص میکنید اولیش رو اون تایپی که میخواید سریالایز کنید و دومیش خروجی ای که میخواید به سیگنالگو بدید تا به کلاینت ارسال کنید یا برعکس از کلاینت به سرور. هر وقت سیگنالگو با این آبجکت هنگام تبادل اطلاعات مواجه بشه اونو به شما میده تا برای تبدیل کنید به خروجی ای که میخواستید چون جیسون از byte ارایه و string پشتیبانی میکنه شما میتونید مثلا خروجی رو Base64String هم بذارید.
    البته من خودم از این روش برای دانلود و آپلود عکس استفاده نمی کنم.این قسمت صرفا برای انواع داده هایی هست که تبدیل پذیر نیستند.سیگنالگو خودش سیستم ارسال و دریافت Stream و فایل رو با سرعت بسیار بالا داره و نیاز به تبدیل به جیسون نیست.

    تابع HandleDeserializingObject هم دقیقا عکسش رو انجام میده هر وقت بخواید ورودی ای که از مثلا از کلاینت میاد به عنوان بایت رو تبدیل کنید به Bitmap از این تابع استفاده میکنید سیگناگو خودش تشخیص میده شما کجا از Bitmap استفاده کردید همونجا ورودی رو بایت گرفته و تبدیل به Bitmap میکنه (نه برای ورودی های دیگه که از نوع بایت هستند ولی خروجیشون فرق میکنه)

    3.هم سیستم ارسال و دریافت استریم و فایل هست که کمی تغییرات توش داده شده و راحت تر و قوی تر شده که بعدا توضیح میدم.

    ناگفته نمونه یه بنده خدای ایتالیایی هم از پروژه خوشش اومده و داره استفاده میکنه و توی داکیومنت کردن و ویکی کردن توی گیتهاب کمک میکنه که داریم با هم صفحه ی ویکی سیگنالگو رو تکمیل میکنیم (ایشون خودش قبلا SignalR کار میکردن):

    https://github.com/SignalGo/SignalGo-full-net/wiki

    4.سیستم AutoReconnect که با این سیستم بعد از هر بار دیسکانکت شدن کلاینت از سرور مجدد تلاش میکنه که به سرور متصل بشه
    5.سیستم اولویت بندی Priority system که باهاش توابعی که اولیت دارند رو مشخص میکنید.

    فرض کنید بعد از هر بار کانکت شدن به سرور کلاینت باید مجدد لاگین کنه و یه سریع تنظیمات رو دریافت کنه.حالا توی این حالت کاربر توی صفحه ی گزارش یک لیست وجود داره که جزو اولویت ها بعد از اتصال نیست ولی کاربر وقتی میخواد گزارش بگیره اتصالش با سرور قطع میشه.نقشه چیه؟
    1.درصورت قطع شدن نباید تابع دریافت گزارش صدا زده بشه چون به خطا میخوره
    2.کاربر باید به سرور متصل بشه
    3.کاربر باید لاگین کنه
    4.مجدد تابع گزارش گیری صدا زده بشه و لیست رو دریافت کنه.

    این فرایند رو باید همیشه به صورت دستی انجام میدادیم که Priority system توی سیگنالگو خودش اینو هندل میکنه.یعنی:
    1.درصورت قطع شدن ارتباط، هر تابعی که صدا بزنید نگه داشته میشه و چیزی سمت سرور نمیره و خطایی برگشت داده نمیشه تا مجدد سعی کنه و اتصال پیدا کنه.
    2.بعد از وصل شدن خودش لاگین رو صدا میزنه
    3.بعد از لاگین شدن خودش توابع در حال انتظار رو ازاد میکنه و صدا میزنه و خروجی رو به صورت نرمال همونطوری که صدا زده بودید و منتظر پاسخ مونده بودید برمیگردونه

  5. #5

    نقل قول: SignalGo ارتباط امن، سریع، و راحت با خوانایی کد بالاتر بین کلاینت و سرور...

    سلام.
    نمونه سورس کلاینت و سرور اتاق چت روم که حدود 1 سال پیش با سیگنالگو نوشتم. قابلیت های این چت روم:
    1.چت و پیام رسانی کاربران
    2.کاربران ادمین و غیر ادمین و قابلیت محدود کردن دسترسی کاربران
    3.گفتگوی صوتی انلاین بین کاربران
    4.کامنت کردن ورود و خروج کاربران
    5.اجازه گرفتن کاربران جهت گفتگوی صوتی (بدون اجازه گرفتن نمیتونن صحبت کنن)
    و تنظیمات اتاق و ...



    آدرس سروس:

    https://github.com/Ali-YousefiTelori...odConversation


    نحوه ی استفاده:
    1.دو تا پروژه ی سرور و کلاینت از هم تفکیک شده:
    الف کلاینت:
    NoorpodConversation.UI
    ب سرور:
    NoorpodConversation.WindowsService

    2.سرور با کنسول اجرا میشه که از دیتابیس sql express استفاده میکنه خودش دیتابیس رو کنار نرم افزار میسازه و همه ی کاراش رو میکنه فقط شما باید sql express نصب کرده باشید روی سیستمی که سرور رو اجرا میکنید برای تغییر connectionstring هم به فایل NoorpodContext.cs رجوع کنید و تغییرش بدید.

    3.به صورت لوکال میتونید راحت تست کنید و نام کاربری admin و رمز 123 به طور پیشفرض با کاربری ادمین ساخته میشه که میتونید لاگین کنید.

    4.برای راه اندازی سرور روی شبکه یا اینترنت حتما نرم افزار سرور رو که فایل NoorpodConversation.WindowsService.exe هست توی فایروال بهش دسترسی بدید. و برای کلاینت هم توی سورس NoorpodServiceHelper.cs آدرس localhost رو (خط 63 و 66 توی سورس) به آی پی سرور خودتون (شبکه داخلی یا اینترنت) تغییر بدید تا کلاینت به اون آدرس متصل بشه.سرور تغییراتی نمیخواد.

    5.سورس با ویژوال استادیو 2017 ویرایش شده نسخه های پایین تر کار نمی کنن.

  6. #6

    نقل قول: SignalGo ارتباط امن، سریع، و راحت با خوانایی کد بالاتر بین کلاینت و سرور...

    در نسخه ی جدید سیگنالگو قابلیت Add service reference به ویژوال استادیو با یک افزونه اضافه شده که با استفاده از اون میشه تمامی مدل ها وسرویس ها و کلاس های مورد نیاز کلاینت با پیاده سازی INotifyPropertyChanged برای مدل ها بدون دستکاری مدل های سرور رو برای کلاینتتون فراهم کنید.قابلیت جالبی که این سیستم داره اینه که میتونید مدل های جنریت شده رو با یک قابلیت تغییراتی توش ایجاد کنید که با بروز رسانی سرویس از سرور اون تغییرات از بین نرن مثلا چند تا پروپتری به کلاس یک مدل اضافه کنید.
    نصب افزونه از:
    https://marketplace.visualstudio.com...nalGoExtension




تاپیک های مشابه

  1. پاسخ: 0
    آخرین پست: شنبه 24 خرداد 1393, 19:51 عصر
  2. سوال: ارتباط بین کلاینت و سرور
    نوشته شده توسط com_eng_abasszadeh در بخش Oracle
    پاسخ: 8
    آخرین پست: دوشنبه 22 اسفند 1390, 22:50 عصر
  3. سوال: ارتباط امن بین کلاینت و سرور
    نوشته شده توسط farzadny در بخش امنیت در نرم افزار و برنامه نویسی
    پاسخ: 0
    آخرین پست: چهارشنبه 12 آبان 1389, 15:23 عصر
  4. ارتباط بين كلاينت و سرور
    نوشته شده توسط a_m_i_n_000 در بخش برنامه نویسی مرتبط با شبکه و وب در VB6
    پاسخ: 1
    آخرین پست: دوشنبه 07 بهمن 1387, 08:50 صبح
  5. سوال: ارتباط امن بین کلاینت و سرور
    نوشته شده توسط hmm در بخش SQL Server
    پاسخ: 1
    آخرین پست: سه شنبه 03 دی 1387, 13:14 عصر

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •