ورود

View Full Version : ارسال پیام آنلاین به تعدادی از کاربران



resident
سه شنبه 25 مهر 1396, 10:40 صبح
سلام.
من میخوام وقتی تو برنامم درخواستی ثبت میشه، به مسئولین کار پیامی ارسال کنم که این کاربران هم هر بار تغییر می کنه.
میخوام پیام همون لحظه به کاربر نمایش داده بشه، بدون اینکه صفحه رو رفرش کنه...

چطور میشه این کار رو انجام داد؟ به غیر از SignalR روشی هست؟

Moien Tajik
سه شنبه 25 مهر 1396, 11:49 صبح
SignalR روش خوب و راحتی هست برای نمایش و دریافت اطلاعات بصورت RealTime و نیاز به رفرش هم نداره ، چرا ازش استفاده نمیکنید ؟
http://www.c-sharpcorner.com/UploadFile/raj1979/broadcast-message-using-signalr/

resident
سه شنبه 25 مهر 1396, 11:55 صبح
SignalR روش خوب و راحتی هست برای نمایش و دریافت اطلاعات بصورت RealTime و نیاز به رفرش هم نداره ، چرا ازش استفاده نمیکنید ؟
http://www.c-sharpcorner.com/UploadFile/raj1979/broadcast-message-using-signalr/

ازش استفاده کردم. جواب هم میده اما مشکلم اینه که بعد از 15-20 دقیقه برنامه هنگ می کنه و کاربر باید از برنامه خارج بشه و مجدد وارد بشه تا بتونه کار کنه.

نمیدونم مشکل از کجاست.


تو لینکی که شما فرستادین، یه پیام رو به همه کاربران میفرسته اما من میخوام فقط به تعدادی شون بفرسته. تو برنامه من هر کاربر یه UserId داره اما تو این مثالهایی که من دیدم همشون با Context.User.Identity کار می کنن.


می تونید تو همین سیگنال آر کمک کنید؟

Moien Tajik
سه شنبه 25 مهر 1396, 12:54 عصر
بطور پیشفرض SignalR از IPrincipal.Identity.Name برای username استفاده میکنه که شما میتونید تغییرش بدید و از id استفاده کنید :
https://docs.microsoft.com/en-us/aspnet/signalr/overview/guide-to-the-api/mapping-users-to-connections
https://www.red-gate.com/simple-talk/dotnet/asp-net/selective-updates-with-asp-net-signalr/

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

برای رفع مشکل کندی روش هایی ارائه شده :
https://docs.microsoft.com/en-us/aspnet/signalr/overview/performance/signalr-performance
https://stackoverflow.com/a/14473214/6661314

resident
چهارشنبه 26 مهر 1396, 16:14 عصر
ممنون از شما.

یه سوال:
تو سیگنال آر به ازاء هر تبی که باز میشه یه ConnectionId برای کاربر ثبت می کنه.

من از کد زیر برای ارسال پیام به کاربرها استفاده می کنم.

hubContext.Clients.Clients(user.ConnectionIds.ToLi st()).receiveNotification(message, userID,link);


مشکلی که دارم اینه که میخوام یه پیام یه بار به کاربر ارسال بشه نه به تعداد ConnectionId هاش.

چطور می تونم یکی از ConnectionId های فعالشو پیدا کنم و فقط به اون پیام رو ارسال کنم؟

آیا راه بهتری هم وجود داره؟

من طبق این لینک هم کار کردم

https://stackoverflow.com/questions/19522103/signalr-sending-a-message-to-a-specific-user-using-iuseridprovider-new-2-0

اما چون از
request.User.Identity.Name استفاده نمی کنم، این روش جواب نمیده. من آیدی کاربرهامو از تو جدول میخونم.
مقدار request.User.Identity.Name تو برنامم "" هست.

ممنون میشم راهنماییم کنید

(https://stackoverflow.com/questions/19522103/signalr-sending-a-message-to-a-specific-user-using-iuseridprovider-new-2-0)

resident
شنبه 29 مهر 1396, 11:43 صبح
اساتید عزیز کسی می تونه کمک کنه؟