Asp.Net Chat 服务器端轮询
-
19-09-2019 - |
题
你好,
我已经使用 Comet 实现了一个聊天应用程序。该请求在服务器上“挂起”,直到新消息到达。然后,它带着新消息返回给客户端,并再次发送给服务器。
我的问题是:
为了检查新消息,我每 600 毫秒轮询一次数据库。我执行一个简单的查询“select...from messages where messageId > ' + lastMessageId”。
此外,为了维持在场,我经常在每个用户“ Lastekealivetime”中非常(非常)更新数据库。
SQL Server 事务日志变得越来越大,并且在某个时刻,我的聊天应用程序停止工作。
聊天用户不是注册用户,他们只是可以随时离开页面的随机用户。
谢谢Yaron
解决方案
你能使用通用的缓存对象最后存活的信息?这似乎是它的少量信息,你可以避开很多的SQL更新。
其他提示
以下是防止事务日志失控的方法: http://support.microsoft.com/kb/873235
该文章中的选项包括:
- 做收缩手术。
- 更改日志大小。
- 配置自动扩容。
- 改变恢复模式。
- 定期备份日志文件。
和更多。
作为旁注,可能值得设置用户列表及其最后活动日期,并将其作为对象存储在应用程序状态中。以这种方式访问会更快,并且您可以不太频繁地保留这些值。
从全模式事务日志转换为简单模式应该解决您的日志增长的问题。
不过,我还要补充一点,它通常是一个好主意,以避免投票,如果你可以,因为它没有可扩展性。你可能会考虑切换到使用服务代理或SqlDependency
的事件驱动模型。还有其它的方法,以保持有效指示,太。
不隶属于 StackOverflow