【问题标题】:Multiple Single Chat Rooms using SignalR (ASP.NET Core)使用 SignalR (ASP.NET Core) 的多个单聊天室
【发布时间】:2023-04-04 11:29:01
【问题描述】:

我必须在两个用户(一个被雇佣的人和一个雇佣者)之间创建一个聊天。它不需要是实时的,但使用 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);
    }
}

【问题讨论】:

    标签: asp.net-core signalr


    【解决方案1】:

    关于这个问题

    如何存储“此用户必须向其发送消息”的信息 那个用户”,在 1 对 1 聊天中,而不是向所有人广播?

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

    还有1:1之间发消息我写小博here大家可以看看

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

    【讨论】:

    • 完美!我将使用集线器上的结构和 ConnectionIds 字典来完成此操作。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2012-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多