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

问题描述 投票:0回答:1

我是SignalR的新手,我需要在我的ASP.NET MVC Web应用程序中使用实时聊天。所以我按照这个教程来做。https:/docs.microsoft.comen-usaspnetcoretutorialssignalr?view=aspnetcore-3.1&tabs=visual-studio。问题是我需要怎么做才能把消息保存到我的PostgreSQL数据库中,以便以后可以显示所有消息的列表?谢谢你了。

javascript c# html asp.net signalr
1个回答
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);
}

这只是一个例子,你可以这样做。

© www.soinside.com 2019 - 2024. All rights reserved.