代码之家  ›  专栏  ›  技术社区  ›  AaronSieb

使用ASP.NET和Ajax创建共享工作区

  •  3
  • AaronSieb  · 技术社区  · 17 年前

    这是我最近一直在想的一个假设情况。假设我在ASP.NET和Ajax中创建了一个交互式页面,我希望多个用户能够同时操作它。维护此页状态的最佳方法是什么?尤其是如果页面相对短暂,并且不需要特别地存储在数据库中?

    作为一个具体的例子,假设我正在实现一个基本的跳棋游戏。服务器需要始终保持板的状态。客户需要定期检查电路板的状态,并且需要能够将他们的更改传输到电路板。当所有玩家离开时,或者游戏结束时,不再需要棋盘,服务器可以处理它。

    我可以把所有东西都存储在数据库中,当客户机要求更新板时检索,当服务器收到更新时保存。但这似乎是额外的开销。

    静态变量呢?他们能胜任这项工作吗?我可以用另一种存储机制吗?或者这远远超出了ASP.NET所能有效地做到的极限,如果我想实现这一点,我应该考虑一种完全不同的技术?

    更新:
    一个快速更新,看看我是否能得到另一轮的答案。经过一番研究,以下是我目前掌握的情况:
    Manu 建议独立使用MemCached来存储数据。我喜欢这种解决方案即使在多服务器环境中也能工作,但我注意到了一些缺点:
    1)MemCached的网站说它是为阅读量大的应用程序(相对于传统的web应用程序来说,这不是),而且它“不可靠”。我还没有足够的时间来确定这些特性有多重要(即写得慢吗?是否存在传播延迟?).
    2)在一个与我的应用程序(存储会话数据)有些接近的实现中,MemCached站点在缓存后面使用一个数据库,即使数据不需要持久化。
    3)我有些担心MemCached在托管环境中的可用性。

    看看静态变量,它们看起来确实很快。它们不是线程安全的,但这是可以解释的。但是,它们是工作进程的本地进程,所以我不确定它们如何处理负载平衡或web花园。

    最后,至少有一个 ASP.NET-based chat client (与本例非常相似)使用数据库作为后端。使用适当的缓存,这可能只是“足够好”

    2 回复  |  直到 8 年前
        1
  •  1
  •   Matthew Scharley    17 年前

    这在很大程度上取决于这个假设系统的使用。有合理的刷新率(也许5秒?),以及适当优化的数据库、适当的密钥等。这不会对服务器造成太大的压力,特别是如果您通过带有差异更新的JSON-RPC样式调用(仅给出自x时间以来的更改)而不是全板更新来执行此操作。

    由于没有使用ASP.NET,我不能评论它的静态变量,我假设它们在PHP中工作类似于会话变量,在这种情况下,只要它的性能至少与PHP一样好,这个方法也不会太麻烦。实际上,很有可能ASP.NET将这些变量存储在某种形式的数据库中。我无法想象这是一个比上面的数据库选项差得多的选项,如果不是更好的选项性能方面的话,只要有某种方法在客户端之间共享数据。

        2
  •  1
  •   Manu JCasso    17 年前
    推荐文章