【问题标题】:Global variables and sessions in asp.netasp.net 中的全局变量和会话
【发布时间】:2015-08-17 22:40:13
【问题描述】:

我是 web 开发的新手,来自 java 和 android 的世界,我有几个问题。 (我正在使用 asp.net)。

  1. 假设我有一个简单的网页,其标签显示一个数字和一个按钮。当任何用户按下按钮时,所有查看站点的用户的数字都会自动增加,即使他们没有刷新页面。我会使用会话来实现这一目标,还是应该研究其他概念?
  2. 我有 2 种类型的计数器,它们存储在具有以下架构的 mysql 表中。

Counter_IDIncrement_Value

每个计数器在设定的时间内都处于活动状态,并且只有一个计数器实例可以在某个时间点处于活动状态。在此时间之后,计数器重置为 0,并创建一个新的计数器实例。我将所有活动的实例以及过去的实例存储在具有此模式的表中。

Instance_IDCounter_IDCounter_ValueStatus(Active/Complete)Time_Remaining

当用户打开专用于两种计数器类型之一的页面时,需要加载有关该计数器当前运行实例的信息。我是否只需执行一个 SQL 查询来实现这一点,并在每次加载计数器页面时读取活动计数器的信息,还是有一种方法可以将这些信息存储在站点上,以便站点“知道”当前是哪个实例活动并且不需要对每个请求进行 SQL 查询(使用全局变量概念)?显然,上述情况只是我用来解释问题的简化示例。

【问题讨论】:

  • 您如何处理陈旧数据问题?那么,当客户端应该知道但不知道的数据库值发生了什么事时会发生什么?
  • 这正是我想知道的......我习惯于处理程序内的所有数据处理,并且每次我需要时都使用服务器来获取数据,这就是为什么概念的原因在服务器上这样做让我有点困惑
  • 所以如果你需要的话,用蜡笔画出来并考虑一下:> 有 ajax,有棱角,有约束力,有很多方法可以给猫剥皮。其中一些things 也是特定于浏览器的。
  • 添加了一些其他标签以吸引不同的受众
  • 谢谢,我去看看你提到的东西

标签: mysql asp.net session websocket long-polling


【解决方案1】:

您可以使用ApplicationState 缓存非用户特定的全局值。在您的第一个示例中,由于所有用户的数字都会递增,因此您可以在递增时将其以事务方式存储在数据库中,并将其缓存在 ApplicationState 中,以便在服务器上呈现页面时可以快速读取它。您必须小心确保正确处理并发,以便每次增加数字时数据库和缓存都会自动更新。

您的问题有点不清楚,但如果您的要求是还向当前正在使用您网站的所有用户实时发布对数字的更改,您将需要查看真实的- 时间技术。 Websockets 对此很有用(如果在服务器和客户端浏览器上可用)。具体来说,在 .NET 平台上,SignalR 是实现从服务器到客户端的实时通信以及在不支持 WebSocket 的情况下优雅地回退的好方法。

为了清楚起见,您不会在这种情况下使用会话存储(除非我误解了您的问题)。会话是每个用户的,通常不应影响系统中的其他用户。您的示例都是关于全局值的,因此 Session 在这种情况下不是正确的选择。

对于您的第二个示例,使用 ApplicationState 和事务性数据库提交,您应该能够缓存当前处于活动状态的计数器并随意切换它们,前提是您在执行它们之间的切换时锁定所有资源。

希望这些信息足以让您朝着正确的方向前进。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-20
    • 1970-01-01
    • 2013-04-27
    • 1970-01-01
    • 1970-01-01
    • 2021-03-01
    • 2012-06-09
    相关资源
    最近更新 更多