PDA

View Full Version : سوال: ارسال اعلامیه به پروژه C#



md3848
جمعه 03 اردیبهشت 1400, 14:50 عصر
سلام، میخوام یه سری اعلامه به پروژه ارسال کنم،
مثلا نسخه جدید منتشر شد، لیست تغییرات در این لینک، آبدید به نسخه جدید در این لینک.
یا مثلا هر اعلامه دلبخواهی که بخوام برا کاربرایی که از نرم افزارم استفاده میکنن، ارسال کنم، مثلا : پرسپولیس ساعت فلان امروز بازی داره، استقلال ساعت بیسال فردا بازی داره.
دقیقا مثل چیزی که تو ویژال استودیو هستش ( عکس زیر )

چیزی که به ذهنم میرسه اینه که یه دیتابیس تو هاست ایجاد کنم که اعلامیه ها داخلش ذخیره بشه، و یه کد PHP که هربار پروژه C# بهش درخواستی ارسال کرد، آخرین اعلامیه ( یا اعلامیه ها ) رو براش ارسال کنه، اینطوری مثلا هر 1 ساعت یکبار پروژه C# من میاد یه درخواست به صفحه وب فوق ارسال میکنه و اگه پیغام جدیدی موجود بود، به کاربر نمایش میده.

سوال : آیا این روش درست و اصولی هستش؟ آیا روش بهتره یا کلا روش دیگه ای وجود داره؟

153253

barnamenevisjavan
جمعه 03 اردیبهشت 1400, 18:07 عصر
سلام، میخوام یه سری اعلامه به پروژه ارسال کنم،
مثلا نسخه جدید منتشر شد، لیست تغییرات در این لینک، آبدید به نسخه جدید در این لینک.
یا مثلا هر اعلامه دلبخواهی که بخوام برا کاربرایی که از نرم افزارم استفاده میکنن، ارسال کنم، مثلا : پرسپولیس ساعت فلان امروز بازی داره، استقلال ساعت بیسال فردا بازی داره.
دقیقا مثل چیزی که تو ویژال استودیو هستش ( عکس زیر )

چیزی که به ذهنم میرسه اینه که یه دیتابیس تو هاست ایجاد کنم که اعلامیه ها داخلش ذخیره بشه، و یه کد PHP که هربار پروژه C#‎ بهش درخواستی ارسال کرد، آخرین اعلامیه ( یا اعلامیه ها ) رو براش ارسال کنه، اینطوری مثلا هر 1 ساعت یکبار پروژه C#‎ من میاد یه درخواست به صفحه وب فوق ارسال میکنه و اگه پیغام جدیدی موجود بود، به کاربر نمایش میده.

سوال : آیا این روش درست و اصولی هستش؟ آیا روش بهتره یا کلا روش دیگه ای وجود داره؟

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

md3848
جمعه 03 اردیبهشت 1400, 23:20 عصر
تو این لینک ( Push Notification Service for WPF based desktop app? (https://stackoverflow.com/questions/41606400/push-notification-service-for-wpf-based-desktop-app) ) یکی گفته که تو UWP پشتیبانی میشه این داستان :گریه:، یکی گفته microsoft.azure داره این ویژگی رو ( راستی مگه این azure یه جور دیتابیس آنلاین نی که برا استفاده ازش باید پول داد؟ :متفکر: )
Windows Push Notification Services (WNS) overview (https://docs.microsoft.com/en-us/windows/uwp/design/shell/tiles-and-notifications/windows-push-notification-services--wns--overview)
Tutorial: Send notifications to Universal Windows Platform apps using Azure Notification Hubs (https://docs.microsoft.com/en-us/azure/notification-hubs/notification-hubs-windows-store-dotnet-get-started-wns-push-notification)
پس تا اینجا یه WNS داریم و یه Azure Notification Hubs که خب هیچ کدوم بکار WPF نمیاد :لبخند:

md3848
چهارشنبه 08 اردیبهشت 1400, 04:33 صبح
خب کدشو زدم نتیجه هم گرفتم، ولی اون بحث "پوش نوتیفیکشن" رو هم بنا رو گزاشتم بر اعتماد که برا ویندوز/WPF وجود نداره ( البته شاید هم مشکل از جای دیگه بوده که نرفتم سراغش :لبخند: )

153269

روال کارم اینطور بود که یه دیتابیس سمت سرور ایجاد کردم، که سه تا فایل ManageNotifications.php و ReadNotifications.php و dbConfig.php رو داره، یه دیتابیس هم سمت پروژه C#‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎ ‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎ ‎‎‎ ( پروژه مخصوص کاربرا ) ایجاد کردم تا اعلامیه هایی که قبلا از سرور گرفتیم رو دوباره نگیریم! ( در جهت کاهش نت مصرفی کاربران، اینقدر بفکر کاربرا هستم من :قهقهه::لبخند: )
فایل dbConfig.php که یوزر نیم و پسورد های دیتابیس داخلش قرار داره.
پروژه اصلی C#‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎ ‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎ ‎‎‎ ( مخصوص یوزر ها که عکسشو در بالا میبینید ) برا خوندن اعلامیه ها از فایل ReadNotifications.php استفاده میکنه، کار این فایل اینه که میره اعلامیه هایی که داخل دیتابیس مربوطه در سمت سرور قرار داره رو میخونه و به عنوان پاسخ ارسال میکنه؛ سمت پروژه C#‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎ ‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎، هم درجا داده هایی که گرفتمو در دیتابیس پروژه C#‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎ ‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎ ذخیره میکنم و نمایش کاربر میدم.
پروژه فرعی C#‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎ ‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎ ‎‎‎ ( که مخصوص من برنامه نویس هستش که عکسشو در پایین میبینید ) برا ارسال اعلامیه از فایل ManageNotifications.php استفاده میکنه، کار این فایل اینه که اعلامیه ای که بهش دادیم رو به دیتابیس سرور اضافه میکنه.

حالا اصل داستان، یه timer برا پروژه باید ایجاد کرد تا مثلا هر 1 ساعت یکبار بره فایل ReadNotifications.php رو بخونه و اعلامیه های جدید رو نشون بده ( اگه هم اعلامیه جدیدی موجود نبود که هیچی )، چون بحث "پوش نوتیفیکشن" ( تعریفشو دوستمون کردن در پست بالا، دلیل عدم استفاده شو هم در بالا و پست قبلیم ذکر کردم ) رو استفاده نکردیم، مجبورم به کمک تایمر اینکارو بکنیم، مثلا تایمرو هر نیم ساعت بزارید یا هر زمانی که حال کردید :لبخند:

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

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

153270

پس من فعلا برم سراغ امنیت کدای سمت سرور چون استرس دارم :شیطان: و بحث "پوش نوتیفیکشن" چون داره قلقلم میده :کف:

ولی این داستان "پوش نوتیفیکشن" هم فک کنم با تایمر باشه دیگه، که هر دقیقه میره بررسی میکنه ببینه خبری هس یا نه، شاید هم نه، چون تو پروژه های مث چت روم و اینجور چیزا مثلا باید به صورت Real time عمل کنه که نیازه هر ثانیه شاید هم زمانی کمتر در حدود نیم ثانیه یکبار بررسی کنه که اینطوری بابای نت در میاد؛ فک کن ثانیه ای 5 بار درخواست داده بفرستی، هر شبانه روز ( 24 ساعت ) حدود 86400 ثانیه داره، پس حدود 432000 تا درخواست باید ارسال کنیم به سرور، هر درخواست رو هم 0.05KB فرض کنی ( یکی از درخواستایی که من به وب میدم حجمش تو این مایه هاس )، در مجموع میشه حدود 21.6MB، که حالا با کاهش تعداد داده های ارسال و دریافتی میشه حجم هر درخواست رو به کمتر از 0.01KB کاهش داد مثلا که اون وقت حجم نت مصرفی کاربر تقریبا میشه حدود 4.3MB؛ ولی خب برا پروژه من همون هر 1 دقیقه یک درخواست دریافت داده هم ارسال بشه هم راضی هستیم :لبخند: حجم مصرفی میشه چیزی حدود 15KB، تعداد درخواست ها هم میشه 1440 تا، از نظر حجمی که برا کاربر خوبه، اما از نظر تعداد درخواست ارسالی از نظر سرور نمیدونم خوبه یا نه، چون مثلا 1000 نفر از نرم افزار استفاده کنن اون 1440 برا سرور میشه 1440000 و...؛ پس اینجا از دید حجم مصرفی کاربر ( برا نرم افزار خودم ) میشه گفت گور بابای "پوش نوتیفیکشن" :لبخند: ولی از دید تعداد درخواست هایی که هر کاربر به سمت سرور ارسال میکنه، نظری ندارم که خوبه یا بد، ولی برا پروزه هایی مثل چت روم، بابای سرور در میاد اگه هرکاربر 432000 تا درخواست ارسال کنه سرور؛ دوس دارم بدونم این "پوش نوتیفیکشن" چه کلکی سوار کرده برا کارش ( از چه روشی استفاده کرده )؛ ولی یه چی هم هستش، اونم این که ممکنه برا کارهای مختلف به لینکهای مختلف درخواست داده بدی، اون وقت تعداد درخواستا و حجم مصرفی به صورت ناجوری زیاد میشه که! :گریه:
توجه : در بالا داده های فوق رو برای 24 ساعت حساب کردم.

یه سرچ کوچیک درباره Push Notifications و WPF
1) WPF Support for Push Notifications (https://github.com/microsoft/appcenter/issues/898) : تو این لینک که آبجی تیشه به ریشه امیدها زد، مگه خبر ممر یوخدو.
2) Push Notification Service for WPF based desktop app? (https://stackoverflow.com/questions/41606400/push-notification-service-for-wpf-based-desktop-app) : تو اینم اولی میگه باید از UWP استفاده کنی این که هیچ؛ بعدی میگه از Microsoft.Azure.NotificationHubs استفاده کن، که لیست قیمتاش در این لینک ( Notification Hubs pricing (https://azure.microsoft.com/en-us/pricing/details/notification-hubs/) ) هستش که گزینه رایگان هم داره، تا 1 میلیون پوش در ماه ( فک کنم ) رایگانه، بنظر گزینه خوبی میاد، از این سرویس استفاده کردید تا حالا؟ چطوره؟
3) PushNotification to WPF Applications (https://social.msdn.microsoft.com/Forums/vstudio/en-US/a9a8ce04-ad70-4518-9826-199a16e2837f/pushnotification-to-wpf-applications?forum=wpf) : تو این لینکم که طرف میگه از WCF استفاده کن، که اصلا نه میخوام بدونم WCF چیه نه هیچ چیز دیگه ای، حوصله یاد گرفتن چیز جدید ندارم بخاطر یه کار کوچیک و اختیاری "پوش نوتیفیکشن" :عصبانی++:

فک کنم همون بیخیال "پوش نوتیفیکشن" بشم و برم از همون روش 1 دقیقه یکباری که در بالا رمانشو نوشتم استفاده کنم، راه دیگه ای فعلا سراغ ندارم، ولی میترسم تعداد کاربرا زیاد بشه، بعد تعداد درخواستا زیاد بشه بعد سمت سرور به مشکل بخورم، نمیدونم شاید هم به مشکل نخورم. :متفکر: