如何将SignalR聊天消息保存到数据库

时间:2020-05-19 09:56:55

标签: javascript c# html asp.net signalr

我是SignalR的新手,我需要在ASP.NET MVC Web应用程序中使用实时聊天。因此,我遵循了本教程:https://docs.microsoft.com/en-us/aspnet/core/tutorials/signalr?view=aspnetcore-3.1&tabs=visual-studio 问题是,要将消息保存到PostgreSQL数据库中需要做什么,以便以后可以显示所有消息的列表? 非常感谢。

1 个答案:

答案 0 :(得分:0)

您已经实现了聊天,您只需要使用管理器来实现数据库,将管理器注入到您的中心并保存/获取消息。

由于您未提供任何代码,因此请看以下示例:

使用DI将数据库管理器注入到您的中心。

private IDatabaseManager DatabaseManager
{
    get
    {
        return this.serviceProvider.GetRequiredService<IDatabaseManager>();
    }
}

然后,您只需在集线器中创建两个方法,当客户端连接到聊天室以获取消息时,该方法便会被客户端调用,例如:

public async Task JoinChatRoom(string chatRoomName)
{
    await this.Groups.AddToGroupAsync(chatRoomName).ConfigureAwait(false);

    Dictionary<string, string> messages = await this.DatabaseManager.GetChatHistory(chatRoomName).ConfigureAwait(false);

    await this.Clients.Group(chatRoomName).BroadcastMessageAsync(messages);
}

并像这样保存聊天中的每条消息:

public async Task SendMessageToRoom(string message, string chatRoomName)
{
    await this.DatabaseManager.SaveChatHistory(chatRoomName, message).ConfigureAwait(false);

    await this.Clients.Group(chatRoomName).BroadcastMessageAsync(message);
}

这只是一个示例,说明您如何执行此操作。