4

我目前正在构建一个网站(ASP.net c#),我们正在考虑为我们网站上的数据事件创建一个实时提要(类似于 facebook 提要)。我想知道您对如何最好地实现这一点的想法,因为我不确定我的理解是否正确。

我们有一些事件,例如:新文章发布,用户上线。

用户将登录到他们的会员区域,然后应该会看到实时提要。

我目前的想法是每隔几秒钟(从用户浏览器)进行一次查询,以查找自上次请求日期以来的任何新事件。如果自 dateX(上次请求日期)以来有新的,则显示。

我会将最后一个请求日期与用户 ID 一起保存,所以当他们回来时,我知道他们最后看到的是什么。

这是最好的方法 - 还是我应该看看某种推送方法?我需要它对跨浏览器友好并支持旧浏览器......所以我看过的 HTML 5 方法并不是一个真正的选择。

感谢您的任何建议。

4

3 回答 3

2

你可以用AJAX这个。ASP.NET 具有诸如更新面板之类的控件,可为您提供所需的功能。然后,您可以设置更新面板以根据 UserId 和刷新数据的最后日期重新加载内容。

    <asp:ScriptManager ID="ScriptManager1" runat="server">
    </asp:ScriptManager>

 <div id="UserLiveFeed">

    <asp:UpdatePanel ID="upLiveFeed" runat="server">
        <ContentTemplate>
             <asp:Label runat="server" Text="Last updated" id="lblLastUpated">
             <!-- Your content here -->
             <asp:Timer runat="server" id="tmrLiveFeed" Interval="3000" OnTick="tmrLiveFeed_Tick"></asp:Timer>
        </ContentTemplate>
    </asp:UpdatePanel>

</div>

然后更新提要的内容(连接到数据库并获取新数据):(我每 3 秒用当前时间更新标签)

protected void tmrLiveFeed_Tick(object sender, EventArgs e)
{
   lblLastUpdated = DateTime.Now.ToString();
}

另一种选择是使用SignalR,它是一个提供实时功能的 ASP.NET 库。

于 2012-06-25T11:49:00.787 回答
1

您可能想查看SignlarR。这是构建交互式 Web 应用程序的 .NET 库,就像您的场景一样。

另一种选择是您在问题中提到的。每 n 秒进行一次 ajax 调用以检查数据库并更新 UI。但我认为 SignalR 比这要好得多,因为它不依赖于连续命中方法!

于 2012-06-25T11:54:42.373 回答
0

我建议您查看一些消息总线框架,例如NServiceBus或开源MassTransit。这些位于(Microsoft Messaging Queue)MSMQ 之上,以使使用它更舒适,

您可以仅在数据库中写入更改时向所有订阅的客户端发送一条轻量级消息,而不是每隔几秒钟轮询一次数据库。然后,客户端仅对他们感兴趣的更改做出反应。您还可以使队列事务化,这样即使客户端离线/已注销,您也不会丢失任何消息。

(编辑以使文本再次可读......)

于 2012-06-25T11:45:32.077 回答