2009-12-13 158 views
0

直升机,Asp.Net聊天服务器端轮询

我已经实施了一个使用Comet的聊天应用程序。 请求在服务器上“挂起”,直到新消息驱动。然后,它会使用新消息返回给客户端,然后再次转到服务器。

我的问题是:

为了检查新邮件,我查询数据库每600毫秒。 我执行一个简单的查询“SELECT ... FROM其中MESSAGEID>'+ lastMessageId。

另外,为了维持存在,我更新数据库很(非常)经常 与每个用户的消息‘LastKeepAliveTime’。

的SQL Server事务日志变得十分巨大,并且,在某一点上,我的聊天应用程序停止工作。

聊天用户没有注册用户,他们是谁可以在任何离开该页面只是随机的用户时间。

谢谢 亚龙

回答

1

您可以使用通用缓存对象作为最后的保持活动信息吗?它似乎只有少量的信息,你可以避免大量的SQL更新。

1

这里是如何保持事务日志失控:http://support.microsoft.com/kb/873235

选项在那篇文章中包括:

  • 做收缩。
  • 更改日志大小。
  • 配置自动扩展。
  • 更改恢复模型。
  • 定期备份日志文件。

以及更多。

作为一个附注,可能需要设置一个用户列表以及他们最后的活动日期,并将其存储为应用程序状态中的对象。以这种方式访问​​会更快,并且可以减少频繁使用的值。

0

从全模式事务日志切换到简单模式应该可以解决日志增长问题。

但是,我还应该补充说,如果可以的话,避免轮询通常是一个好主意,因为它不可扩展。您可以考虑使用Service Broker或SqlDependency切换到事件驱动的模型。还有其他的方法来保持活力。