c# - "I am alive"服务的设计

标签 c# caching web-applications architecture appfabric

我目前正在设计一个系统,我们需要知道用户是否仍然在线/登录。

该系统是基于 .Net 网络的,因此我们打算使用 AJAX/JSONP 代码来执行此操作,该代码每 2 分钟对服务器执行一次 ping 操作。

有大量用户,因此每 2 分钟执行一次 ping 会导致 ca。每秒 600 次 ping。

因此我们打算将此服务放在它自己的服务器上,并使用 Velocity 将所有信息存储在内存中。

缓存将是一系列命名值对,首先是组,然后是人,以及每个人的时间戳。

问题是我们可以为每个 ping 直接写入速度缓存吗?或者这会导致锁定?我们应该先写入队列,然后从队列更新缓存吗?

在我们更新缓存的同时,将有其他用户按组请求信息。

最佳答案

我认为,如果您可以更改您的模型以使每个缓存项都围绕一个用户而不是您提到的一组用户,那么您应该能够做到这一点。如果您需要按组查询这些项目的能力,则必须考虑一种方法来保留键和组的索引(可能在内存中)以查询项目(查询显然是一个慢点)。

这将使您在同一时间更新同一项目的可能性接近于零(因为每个客户端只会每 2 分钟更新一次)

这将允许您利用乐观并发模型来提高速度,正如在下面链接中的 MSDN 上所讨论的那样,而不会丢失任何数据。

http://msdn.microsoft.com/en-us/library/ee790890.aspx

关于c# - "I am alive"服务的设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4095369/

相关文章:

c# - 在C#中添加两个不同长度的列表

php - 如何在 PHP 中的多个 get 请求之间共享对象?

java - Amazon Cognito 登录方法和 token 验证?

c# - 按回车键时更改焦点控制

c# - 为什么我需要为 Xpath 查询指定命名空间管理器

java - Spring boot Redis @Cacheable 方法没有被另一个类调用

caching - 读取 CPU 缓存内容

language-agnostic - 如何处理 Web 应用程序和 RESTful API 中合并的对象/资源?

c# - 如何在 ASP.NET 中的特定时间运行代码

c# - 纯在 XAML 中定义绑定(bind)时,源变量是否可以在后面的代码中访问?