使用SignalR(ASP.NET Core)的多个单聊天室

时间:2019-07-16 13:04:44

标签: asp.net-core signalr

我必须在两个用户(一个租用的人和一个租用的人)之间创建一个Chat。它不需要是实时的,但是使用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 个答案:

答案 0 :(得分:0)

这个问题

  

我如何存储“此用户必须向其发送消息的信息”   该用户”,并进行1:1聊天,而不是向所有人广播?

我认为您可以将诸如与哪个用户聊天的信息存储到db中。因为您已经在用户与用户之间存储了先前的消息,所以我认为您可以这样做

我也写了一个小型博客here,以便在1:1之间发送消息,所以您可以看看

这个想法是每个用户都有1个连接ID,因此我们需要将该用户的连接ID存储在内存中以从1到1发送消息