SignalR中的数据库广播

时间:2014-05-02 14:53:19

标签: asp.net entity-framework asp.net-web-api signalr

我已经在这里实现了教程Server Broadcast with SignalR,我的下一步是首先通过EF代码将它连接到SQL数据库。

在StockTicker类中,作者编写以下代码:

foreach (var stock in _stocks.Values)
{
    if (TryUpdateStockPrice(stock))
    {
        BroadcastStockPrice(stock);
    }
}

我正在处理的应用程序需要一个实时推送新闻源,其中包含少量用户(约300名用户)。简单地做一些像(伪)的事情会有什么不利之处:

foreach (var message in _db.Messages.Where(x => x.Status == "New")
{
    BroadcastMessage(message)
}

什么是将数据库中的每个消息状态更新为最新的方式!=新的,而不会完全影响性能?

1 个答案:

答案 0 :(得分:1)

我认为确定您的简单解决方案是否会过度影响性能的最佳方法是尝试一下。

以下内容适用于更新每个邮件状态。

foreach (var message in _db.Messages.Where(x => x.Status == "New"))
{
    BroadcastMessage(message);
    message.Status = "Read";
}

_db.SubmitChanges();

如果您发现效率太低,您可以随时写一个stored procedure来选择新消息并将其标记为已读。

通过调整轮询数据库和批处理消息的速率来微调性能可能会更好,这样即使数据库返回多条新消息,您也可以通过SignalR为每个数据库查询广播单个消息。

如果您决定使用存储过程路线,这里有另一篇关于在EF中使用它们的相当深入的文章:http://msdn.microsoft.com/en-us/data/gg699321.aspx