使用signalR在sql数据库中存储聊天对话

Joa*_*nto 7 sql-server chat messages signalr

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

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

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

我的问题是,在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();           
}
Run Code Online (Sandbox Code Playgroud)

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

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

       if (msg.length > 0) {

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

jhi*_*den 4

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

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

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