C# Asp.NETMVC5.1网站在线聊天解决方案

C# Asp.NETMVC5.1网站在线聊天解决方案,c#,asp.net,asp.net-mvc,signalr,asp.net-mvc-5,C#,Asp.net,Asp.net Mvc,Signalr,Asp.net Mvc 5,我有一个Asp.NETMVC5.1网站。我们有3种类型的用户,我想添加对其中一种用户之间聊天的支持。我曾经想到过这样的一些模型: public class Conversation { public NormalUser A { get; set; } public NormalUser B { get; set; } public List<PrivateMessaage> Messages { get; set; } } public class Pri

我有一个Asp.NETMVC5.1网站。我们有3种类型的用户,我想添加对其中一种用户之间聊天的支持。我曾经想到过这样的一些模型:

public class Conversation
{
    public NormalUser A { get; set; }
    public NormalUser B { get; set; }
    public List<PrivateMessaage> Messages { get; set; }
}

public class PrivateMessaage
{
    public NormalUser Sender { get; set; }
    public NormalUser Receiver { get; set; }
    public string Message { get; set; }
    public DateTime Created { get; set; }
}
公共课堂对话
{
公共用户A{get;set;}
公共用户B{get;set;}
公共列表消息{get;set;}
}
公共类私有消息
{
公共用户发送方{get;set;}
公共用户接收器{get;set;}
公共字符串消息{get;set;}
已创建公共日期时间{get;set;}
}
另外,我在项目的其他部分使用了signer,并且认为在signer之上添加聊天界面是一个非常好的解决方案。到目前为止一切都很好。但是,我认为在每次键入消息时点击数据库以插入新消息不是一个好主意。我已经制定了很多策略来在我的网站上实现自定义的甜甜圈缓存,以使每个页面尽可能快,这似乎会取消所有这些!这个问题的首选解决方案是什么?我想我可能会采取以下方法:

  • 将它们批量推送到数据库。例如,一旦消息超过阈值(其日期/时间差大于X或消息计数大于Y)
  • 不支持脱机消息,只需通过信号器将它们在内存中推送到另一端即可
  • 与第二个相同,但在目标用户脱机时支持脱机。我想不会有太多的信息发送给离线用户
  • 不要缓存任何东西。我会锻炼的

第一个的一个问题是,可能会出现网站宕机(更新、断电、启示录(!)等),内存中的所有消息都会丢失的情况。我可以添加一个自定义操作来刷新所有内容,但它从来都不太安全。因为有很多聊天解决方案,我认为有很多非常方便的解决方案。

如果你不反对使用其他数据库,实时聊天非常容易使用,AngularJS。

我选择选项一,如果东西在刷新之间死亡,可能会丢失消息。