【问题标题】:Asp.Net Chat server-side pollingAsp.Net Chat 服务器端轮询
【发布时间】:2009-12-13 00:56:02
【问题描述】:

直升机,

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

我的问题是:

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

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

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

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

谢谢 亚龙

【问题讨论】:

    标签: asp.net comet chat long-polling


    【解决方案1】:

    你能使用一个通用的缓存对象来获取最后一次保持活动的信息吗?看起来信息量很小,可以避免大量的sql更新。

    【讨论】:

      【解决方案2】:

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

      该文章中的选项包括:

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

      还有更多。

      附带说明一下,设置用户列表及其最后活动日期可能是值得的,您将这些用户存储为应用程序状态中的对象。以这种方式访问​​会更快,并且您可以不那么频繁地保留这些值。

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-08-16
          • 2013-11-13
          • 2012-07-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-12-29
          • 2013-05-25
          相关资源
          最近更新 更多