Asp.Net MVC 5.1网站的在线聊天解决方案

时间:2014-05-02 08:50:08

标签: c# asp.net asp.net-mvc signalr asp.net-mvc-5

我有一个Asp.Net MVC 5.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; }
}

另外,我在项目的其他部分使用SignalR,并认为这是一个非常好的解决方案,可以在SignalR上添加聊天界面。到目前为止一切看起来都很好。但是,我认为每次输入消息时都会在数据库中插入新消息并不是一个好主意。我已经创建了很多策略来在我的网站中实现自定义甜甜圈缓存,以尽可能快地使每一页都显示出来,似乎这会取消所有这些!这个问题的首选解决方案是什么?我想我可能采取这样的方法:

  • 批量推送到数据库。例如,一旦消息超过阈值(其日期/时间差异大于X或消息计数大于Y)。
  • 不支持离线消息,只需通过SignalR将内存推送到另一端。
  • 与第二个相同,但在目标用户离线时支持离线。我想没有多少消息会发送给离线用户!
  • 不要缓存任何内容。我会锻炼!!

第一个问题是,可能存在网站崩溃的情况(更新,电源故障,启示录(!)等),内存中的所有消息都将丢失。我可以添加一个自定义动作来刷新所有内容,但它从来都不是很安全。由于那里有很多聊天解决方案,我认为有非常方便的解决方案。

1 个答案:

答案 0 :(得分:0)

如果您不反对使用其他数据库,使用Firebase和AngularJS可以非常轻松地进行实时聊天。