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

How to save signalR chat messages to database

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

您已经实施了聊天,您只需要实施数据库,使用管理器,将管理器注入您的中心和 save/get 消息。

由于您没有提供任何代码,请看这个例子:

使用 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);
}

这只是您如何操作的示例。