使用 SignalR (ASP.NET Core) 的多个单聊天室
Posted
技术标签:
【中文标题】使用 SignalR (ASP.NET Core) 的多个单聊天室【英文标题】:Multiple Single Chat Rooms using SignalR (ASP.NET Core) 【发布时间】:2019-07-16 13:04:44 【问题描述】:我必须在两个用户(一个被雇佣的人和一个雇佣者)之间创建一个聊天。它不需要是实时的,但使用 SignalR 我可以做到这一点,但没问题。
我会将以前的消息存储在数据库中,以便在每次打开聊天时检索。
所以,我只需要在两个用户之间广播一条消息,但是,一个用户可以有多个聊天室和不同的人(但只有 1:1)。
如何在我的代码中实现该逻辑?我必须使用群组吗?如果是这样,我如何在 1:1 聊天中存储“此用户必须向该用户发送消息”的信息,而不是向所有人广播?
我的 ChatHub 课程:
public class ChatHub : Hub
private readonly IChatAppService _chatAppService;
public ChatHub(IChatAppService chatAppService)
_chatAppService = chatAppService;
public string GetConnectionId()
return Context.ConnectionId;
public async Task SendMessage(ChatAddVM message, string userName)
string connectionId = GetConnectionId();
await Clients.Client(connectionId).SendAsync("broadcastMessage", userName, message.Message);
//USED TO SAVE THE MESSAGE ON DB
await _chatAppService.CreateMessage(message);
【问题讨论】:
【参考方案1】:关于这个问题
如何存储“此用户必须向其发送消息”的信息 那个用户”,在 1 对 1 聊天中,而不是向所有人广播?
我认为您可以将信息存储到数据库中,例如从哪个用户到哪个用户聊天。因为您已经在用户与用户之间存储了以前的消息,所以我认为您可以这样做
还有1:1之间发消息我写小博here大家可以看看
这个想法是每个用户都有 1 个连接 ID,所以我们需要将用户的连接 ID 存储在内存中,以便从 1 到 1 发送消息
【讨论】:
完美!我将使用集线器上的结构和 ConnectionIds 字典来完成此操作。谢谢!以上是关于使用 SignalR (ASP.NET Core) 的多个单聊天室的主要内容,如果未能解决你的问题,请参考以下文章
ASP.NET Core SignalR :SignalR Javascript 客户端
使用 SignalR (ASP.NET Core) 的多个单聊天室
ASP.NET Core的实时库: SignalR -- 预备知识