【问题标题】:Storing chat conversations in sql database using signalR使用signalR在sql数据库中存储聊天对话
【发布时间】:2015-07-26 05:49:24
【问题描述】:

我正在开发一个包含这些场景的通用方法的类库:

  • 实时支持聊天(一对一私人文字聊天,与许多管理员和访客)
  • 有许多用户的房间,您可以在其中发送广播和私人消息

以上这两个功能已经实现,现在我的应用程序需要保存消息。

我的问题是,在 SQL 数据库中存储聊天对话的最佳方式是什么:

  1. 每次点击发送,我都会在数据库中插入消息?

  2. 为每个用户创建一个列表,每次单击发送时,消息都会保存在发送消息的用户列表中。然后,如果用户断开连接,我将迭代消息列表并将每条消息都插入数据库中。

还有其他解决方案吗?

我现在正在做的事情如下。我有这个方法,它位于我的 Hub 类中:

public void saveMessagetoDB(string userName, string message)
{
    var ctx = new TestEntities1();

    var msg = new tbl_Conversation {Msg = message};
    ctx.tbl_Conversation.Add(msg); 
    ctx.SaveChanges();           
}

我在客户端 HTML 文件中调用此方法 saveMessagetoDB,如下所示:

$('#btnSendMessage').click(function () {
       var msg = $("#txtMessage").val();

       if (msg.length > 0) {

           var userName = $('#hUserName').val();
           // <<<<<-- ***** Return to Server [  SaveMessagetoDB  ] *****
           objHub.server.saveMessagetoDB(userName, msg);

【问题讨论】:

  • 这将得到很多意见和很少的事实。这使得这个问题超出了 SO 的范围。我建议在它们发生时插入它们,但这取决于这个应用程序是什么。

标签: sql-server signalr chat messages


【解决方案1】:

SignalR 非常适合聊天应用程序,您甚至不需要在 SQL 中存储任何内容,除非您想在以后创建聊天记录(甚至可能没有必要)。

我建议首先使用 SignalR 进行聊天(不要使用 sql 执行任何操作)。然后,一旦工作正常,您可以根据需要将 SQL 日志记录放在您的 signalR 集线器中。

在每条消息上写入 sql 很可能是最有意义的。

【讨论】:

    【解决方案2】:

    如果您决定将聊天记录存储在数据库中,则需要在消息发生时插入/更新消息。

    如果您使用的是PersistentConnection,那么您可以挂钩OnReceivedAsync 事件并从该事件插入/更新数据:

    protected override Task OnConnectedAsync(IRequest request, string connectionId)
    {
        _clients.Add(connectionId, string.Empty);
        ChatData chatData = new ChatData("Server", "A new user has joined the room.");
        return Connection.Broadcast(chatData);
    }
    

    或者在继承自 Hub 的 SignalR 类中,您可以在通知任何客户端之前立即持久化到 Db。

    【讨论】:

    • William 我已经让我的应用程序可以处理我提到的这两个场景,但我必须具备的功能之一是存储 e 检索消息。我想知道是否有人已经做过类似的事情并且什么是最好的选择
    • Joao,请看我修改后的答案。
    • 我明白了,但我正在使用集线器 API
    • 明白了,这就是为什么我的最后一句话说如果你从 Hub 继承 - 那么你在通知任何客户之前或之后坚持到 Db。
    猜你喜欢
    • 1970-01-01
    • 2017-12-27
    • 2013-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多