تبلیغات :
آکوستیک ، فوم شانه تخم مرغی، صداگیر ماینر ، یونولیت
دستگاه جوجه کشی حرفه ای
فروش آنلاین لباس کودک
خرید فالوور ایرانی
خرید فالوور اینستاگرام
خرید ممبر تلگرام

[ + افزودن آگهی متنی جدید ]




صفحه 1 از 2 12 آخرآخر
نمايش نتايج 1 به 10 از 13

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

  1. #1
    کاربر فعال انجمن دات نت عــــلی's Avatar
    تاريخ عضويت
    Feb 2007
    محل سكونت
    زیر سایه عرش الهی
    پست ها
    2,335

    11 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 در دسترس هست.

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

    [ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]

    سورس کلاینت جاوا:
    [ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]

    نصب از طریق nuget:

    [ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]

    [ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]

    [ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]

    [ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]
    [ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]
    Last edited by عــــلی; 31-08-2017 at 08:32.

  2. 6 کاربر از عــــلی بخاطر این مطلب مفید تشکر کرده اند


  3. #2
    ناظر انجمن .NET Framework _H2_'s Avatar
    تاريخ عضويت
    Feb 2007
    محل سكونت
    یک جایی بین Framework و نارمک!
    پست ها
    4,746

    پيش فرض

    سلام
    اول به نام سازنده پروژه دقت نکردم !
    درکل جالب است.
    باید وقت کنم یکبار امتحان کنم...
    برای یکی از ایده های شخصی خودم در حال استفاده از SignalR هستم ...
    یکی از مزایای SignalR را میتوان وجود امکان کدنویسی سمت کلاینت با javascript (بجز #C) به حساب آورد ، مشابه خودتان که کلاینت را به دوزبان نوشته اید ...

    بازهم ممنون و شب خوش

  4. این کاربر از _H2_ بخاطر این مطلب مفید تشکر کرده است


  5. #3
    کاربر فعال انجمن دات نت عــــلی's Avatar
    تاريخ عضويت
    Feb 2007
    محل سكونت
    زیر سایه عرش الهی
    پست ها
    2,335

    پيش فرض

    سلام
    اول به نام سازنده پروژه دقت نکردم !
    درکل جالب است.
    باید وقت کنم یکبار امتحان کنم...
    برای یکی از ایده های شخصی خودم در حال استفاده از SignalR هستم ...
    یکی از مزایای SignalR را میتوان وجود امکان کدنویسی سمت کلاینت با javascript (بجز #C) به حساب آورد ، مشابه خودتان که کلاینت را به دوزبان نوشته اید ...

    بازهم ممنون و شب خوش
    سلام حسن جون.ممنونم
    برای همین اپن سورس هست که برنامه نویس های بخش های دیگه هم بیان و توسعه بدن البته برنامه نویسای جاوا اسکریپت داریم توی شرکتمون احتمالا برای پروژه های بعدی مجبورشون کنیم که کلاینت جاوا اسکریپتشو ردیف کنند.

  6. #4
    کاربر فعال انجمن دات نت عــــلی's Avatar
    تاريخ عضويت
    Feb 2007
    محل سكونت
    زیر سایه عرش الهی
    پست ها
    2,335

  7. 2 کاربر از عــــلی بخاطر این مطلب مفید تشکر کرده اند


  8. #5
    کاربر فعال انجمن دات نت عــــلی's Avatar
    تاريخ عضويت
    Feb 2007
    محل سكونت
    زیر سایه عرش الهی
    پست ها
    2,335

    پيش فرض

    سلام.
    فیچر های جدید:
    1.امنیت ارسال و دریافت اطلاعات با استفاده از ترکیب الگوریتم های AES و RSA
    2.صدا زدن توابع سرور با استفاده از پروتوکول http فعلا متد GET
    3.منیج کردن توابع و کنترلر های http مثل asp.net mvc
    مثلا:

    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    اگر ادرس سرور شما [ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ] باشد با صدا زدن ادرس [ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ] توی مرورگر تابع DownloadImage با مقدار پارامتر های ali و 2 صدا زده میشه.

    نصب از طریق nuget:

    [ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]

    [ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]

    [ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]
    Last edited by عــــلی; 28-04-2017 at 03:04.

  9. 2 کاربر از عــــلی بخاطر این مطلب مفید تشکر کرده اند


  10. #6
    کاربر فعال انجمن دات نت عــــلی's Avatar
    تاريخ عضويت
    Feb 2007
    محل سكونت
    زیر سایه عرش الهی
    پست ها
    2,335

    پيش فرض

    نسخه ی جدید سیگنالگو رو امروز ریلیز کردم.فیچر های اضافه شده:

    1.لاگ کامل تمامی توابعی که توسط کلاینت صدا زده میشه یا از سمت سرور برای کلاینت صدا زده میشه + تمامی ورودی ها + دو زمان (زمان شروع صدا زدن و زمان فرستادن پاسخ به کلاینت) لاگ ها بر اساس تاریخ و ساعت از هم جدا میشن و هر کدوم توی پوشه و ... خودشون قرار میگیرن تا مرتب باشن همچنین برای توابع http هم لاگ میشه به همین صورت.
    مثال فعال کردن:
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

    2.وقتی کلاینت ها به سرور متصل هستند و در حال صدا زدن توابع هستند و کوئری میگیرن و چیزی توی دیتابیس درج میکنن و شما میخواید سرور رو بروز رسانی کنید اگر سرور رو ناگهان ببندید ممکنه اختلال ایجاد بشه.برای همین قسمتی برای سیگنال گو گذاشتم که وقتی سرور رو بخواید بروز رسانی کنید تابعی رو صدا میزنید و سرور تمامی کال های ورودی رو میبنده و صبر میکنه تا تمامی کل هایی که در حال انجامه تکمیل بشه سپس سرور رو میبنده.

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

    مثال:
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    و یه سری رفع باگ و ...

  11. #7
    کاربر فعال انجمن دات نت عــــلی's Avatar
    تاريخ عضويت
    Feb 2007
    محل سكونت
    زیر سایه عرش الهی
    پست ها
    2,335

    پيش فرض

    نسخه ی جدید سیگنالگو منتشر شده. امکانات:
    1.رفع برخی مشکلات
    2.بهینه سازی صدا زدن توابع GET و POST با قابلیت ساپورت ارسال داده json با POST برای کنترلر های HTTP
    3.صفت (Attribute) جدید تبادل اطلاعات که باهاش میتونید ارسال و دریافت اطلاعات به کاربر های مختلف رو محدود کنید.فرض کنید یه سری فیلد دارید توی مدل هاتون که نمیخواید از سمت کاربر دریافت کنید در عوضش هم نمیخواید همش توی توابعتون کد بزنید که اونو از سمت کاربر اگه پر شده بود null اش کنید.یا برعکس یه سری کلاینت های مختلفی دارید مثل اندروید و ویندوز و استفاده از منابع اندروید کمتر از ویندوز هست و نمیخواید همه ی داده هایی که برای کلاینت های ویندوز میفرستید به اندروید هم فرستاده بشن (چون بهش نیازی ندارن) در این صورت از صفت DataExchenger استفاده میکنیم و بهش میگیم که میخوایم این پروپرتی در حالت ارسال یا در یافت از کلاینت محدود بشه در این صورت حتی اگه کلاینت اون فیلد رو پر کنه بازم برای شما null میاد (خود سرور جهت امنیت این رو هندل میکنه) یا اینکه برای استفاده های دیگه مثل مثالی که برای اندروید و ویندوز زدم میتونید Customize اش کنید.

  12. #8
    کاربر فعال انجمن دات نت عــــلی's Avatar
    تاريخ عضويت
    Feb 2007
    محل سكونت
    زیر سایه عرش الهی
    پست ها
    2,335

    پيش فرض

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

    [ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]

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


  13. این کاربر از عــــلی بخاطر این مطلب مفید تشکر کرده است


  14. #9
    کاربر فعال انجمن دات نت عــــلی's Avatar
    تاريخ عضويت
    Feb 2007
    محل سكونت
    زیر سایه عرش الهی
    پست ها
    2,335

    پيش فرض

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



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

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

  15. #10
    کاربر فعال انجمن دات نت عــــلی's Avatar
    تاريخ عضويت
    Feb 2007
    محل سكونت
    زیر سایه عرش الهی
    پست ها
    2,335

    11 نسخه ی جدید سیگنالگو

    نسخه ی جدید سیگنالگو با امکانات زیر منتشر شد:
    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 کار میکردن):

    [ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]

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

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

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

  16. این کاربر از عــــلی بخاطر این مطلب مفید تشکر کرده است


صفحه 1 از 2 12 آخرآخر

Thread Information

Users Browsing this Thread

هم اکنون 1 کاربر در حال مشاهده این تاپیک میباشد. (0 کاربر عضو شده و 1 مهمان)

User Tag List

برچسب های این موضوع

قوانين ايجاد تاپيک در انجمن

  • شما نمی توانید تاپیک ایحاد کنید
  • شما نمی توانید پاسخی ارسال کنید
  • شما نمی توانید فایل پیوست کنید
  • شما نمی توانید پاسخ خود را ویرایش کنید
  •