signalr - 向特定用户 SignalR 发送消息
问题描述
创建聊天应用程序并希望向特定用户发送消息。我可以向特定用户发送消息,但该消息也会显示给其他联系人。示例:Dev 正在向 Josh 发送消息
开发人员向 Josh 发送“你好”
乔希的联系方式为
- 阿米特
- 丽塔
- 开发
和 josh 现在正在谈论 Amit,当时出现的开发消息是 Amit 聊天屏幕
This is my ChatHub.cs---------
public void Send(string receiver, string message)
{
if (receiver != string.Empty && message != string.Empty)
{
string Sender = Context.User.Identity.Name;
Clients.Group(receiver).broadcastMessage(Sender, message);
Clients.Group(Sender).broadcastMessage(Sender, message);
ChatRepository CR = new ChatRepository();
CR.SaveConversation(Sender, receiver, message);
}
}
public override Task OnConnected()
{
string name = Context.User.Identity.Name;
Groups.Add(Context.ConnectionId, name);
return base.OnConnected();
}
请帮助我找不到解决方案谢谢
编辑:我向特定用户发送消息的方法请按照评论中的讨论进行检查
public void Send(string receiver, string message)
{
if (receiver != string.Empty && message != string.Empty)
{
string Sender = Context.User.Identity.Name;
if ("Success" == CR.CheckingForConnetionBetweenUser(receiver, Sender)) //Checking connectivity from a XYZTable
{ //"Success" value from DB shows users are connected to each other
Clients.Group(receiver).broadcastMessage(Sender, message);
}
Clients.Group(Sender).broadcastMessage(Sender, message);
CR.SaveConversation(Sender, receiver, message);
}
}
解决方案
请先尝试调试 OnConnected,检查 Name 值是否正确。您的客户是否有可能在获得某些索赔之前建立连接?
如果您将提供 IUserIdProvider 服务以返回 Name 声明,或者如果您将 userId 映射到登录代码中的 ClaimTypes.NameIdentifier 声明,您将能够使用此方法过滤您的 SignalR 客户端:https ://docs.microsoft.com/en -us/dotnet/api/microsoft.aspnetcore.signalr.ihubclients-1.user?view=aspnetcore-5.0#Microsoft_AspNetCore_SignalR_IHubClients_1_User_System_String _
您将能够像这样调用客户端:
await Clients.User(receiver).broadcastMessage(Sender, message);
SignalR 已经知道哪个主体附加到哪个连接,因此可能不需要为每个用户创建组。
推荐阅读
- c++ - 如何从 C++ 文件中读取特定数量的字符?
- sql - 将 SQL 行值转换为列
- nginx - 如何在 nginx.conf 中获取请求 url 的上下文?
- mysql - 似乎无法使用 phpmyadmin 向我的数据库添加多个列
- reactjs - 创建 Google Maps Circle 并在 React 中设置其半径
- angular - 如何使用 login() 通过 nebular auth/login 库导航到主页?
- firebase - Firebase 实时数据库(根据 UID 获取其他用户信息)与 REST
- c++ - 如何从 C++ 调用动态库函数?
- javascript - 如何检查对象数组中的键是否为空?
- css - 嵌套边界不会留在主要内部输入时:选中