通过长轮询检查数据库是否有变化

时间:2011-12-29 11:41:52

标签: asp.net sql asp.net-mvc-3 chat long-polling

我在ASP.NET MVC3中创建了一个聊天应用程序。 即时通讯使用长轮询和AsyncController来执行此操作

当用户发布其保存在数据库中的聊天时,要检索我是否应该经常检查数据库中的记录更改或确定的间隔后 或者是否有更好/更有效的方法

我遇到了这个question,但无法得到有用的答案。

3 个答案:

答案 0 :(得分:4)

您可以以有效的方式查看SignalR。与标准轮询机制(您定期发送请求以检查更改)相反,SignalR使用推送机制,服务器向连接的客户端发送通知,以通知他们有关更改。

答案 1 :(得分:0)

由于您已经在使用长轮询和异步控制器,为什么不创建一个消息池?看看this solution

简而言之,您应该将其添加到某种队列中,而不是仅仅将更新后的聊天写入数据库。然后每个用户的异步线程正在侦听该池,等待消息出现。当出现一个时,通过正常操作将数据返回给用户。当所有侦听线程都拾取了消息时,可以从队列中删除它。这将阻止您使用多个线程来查找数据库以查找新消息。

答案 2 :(得分:0)

您可以尝试PServiceBus(http://pservicebus.codeplex.com/),这是一个示例网络聊天应用程序(http://74.208.226.12/ChatApp/chat.html)运行,不需要数据库在两个Web客户端之间传递消息。如果您想在数据库中保留数据以便记录,您可以随时订阅聊天消息并将其记录到数据库。