c# - Asp.Net MVC 5.1网站在线聊天解决方案

标签 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 之上添加聊天界面是一个非常好的解决方案。到目前为止一切看起来都很好。但是,我认为每次键入消息时都在数据库中插入一条新消息不是一个好主意。我已经创建了很多策略来在我的网站中实现自定义 donut 缓存,以使每个页面尽可能快,而且这似乎会取消所有这些!这个问题的首选解决方案是什么?我想我可能会采取如下一些方法:

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

第一个问题是,网站可能会出现故障(更新、电源故障、世界末日(!)等)并且内存中的所有消息都将丢失。我可以添加一个自定义操作来刷新所有内容,但它永远不会很安全。由于有很多聊天解决方案,我认为对此有非常方便的解决方案。

最佳答案

如果您不反对使用其他数据库,使用Firebase 进行实时聊天非常容易。和 AngularJS。

关于c# - Asp.Net MVC 5.1网站在线聊天解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23424220/

相关文章:

c# - ASP.NET MVC 中的 DynamoDB session 状态

mysql - 尝试保存小数时始终保存 999.999999

c# - 在运行时为报表设置数据源?

c# - 解析动态 JSON 字符串

c# - 如何删除在 ASP.NET MVC4 SimpleMembership 中具有角色的用户?

c# - ASP.NET MVC3 和 Google Checkout 入门 : Take 2

asp.net - 如何在 ASP.NET 中使用 <label> 标签?

c# - 从硬编码模型到数据驱动菜单

javascript - 带有编辑按钮的 Jquery 数据表可重用部分 View ?

c# - 动态组织和调用 C# 方法