【发布时间】:2014-06-18 21:45:30
【问题描述】:
我有一个 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 将它们在内存中推送到另一端。
- 同2,但支持目标用户离线时离线。我想不会有多少消息会发送给离线用户!
- 不要缓存任何东西。我会努力的!!
第一个问题是,网站可能会出现故障(更新、电源故障、启示录(!)等)并且内存中的所有消息都会丢失。我可以添加一个自定义操作来刷新所有内容,但它从来都不是很安全。由于那里有很多聊天解决方案,我认为有非常方便的解决方案。
【问题讨论】:
-
我投票选项一,如果事情在刷新之间死亡,我可能会丢失消息。
标签: c# asp.net asp.net-mvc signalr asp.net-mvc-5