Asp.Net聊天服务器端轮询

时间:2009-12-13 00:56:02

标签: asp.net comet chat long-polling

直升机,

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

我的问题是:

为了检查新消息,我每600毫秒轮询一次数据库。 我执行一个简单的查询“select message from messages where messageId>'+ lastMessageId。

此外,为了保持存在,我非常(非常)经常更新数据库 每个用户“LastKeepAliveTime”。

SQL Server事务日志变得越来越大,并且在某个时刻,我的聊天应用程序停止工作。

聊天用户不是注册用户,他们只是随时可以离开页面的随机用户。

感谢 亚龙

3 个答案:

答案 0 :(得分:1)

以下是如何防止事务日志失控:http://support.microsoft.com/kb/873235

该文章中的选项包括:

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

等等。

作为旁注,可能值得设置一个用户列表及其作为对象在应用程序状态中存储的最后活动日期。访问这种方式会更快,你可以不那么频繁地保留这些值。

答案 1 :(得分:1)

您是否可以使用公共缓存对象来保存上次保存的信息?它看起来像是一小部分信息,你可以避免大量的SQL更新。

答案 2 :(得分:0)

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

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