我正在制作一个带有每秒变化的服务器端变量的应用程序。这些新变量需要每秒在所有打开该网页的客户端上显示。

现在大多数人告诉我要使用 cometd ,因为我需要每秒推/拉数据,现在我有几个问题:

  • 考虑到我每秒都要从客户端提取或与服务器一起推送新数据这一事实,哪一种是更好的解决方案?
  • 同样,服务器端的项目ID(带有获得ID的变量)也可以更改,并且当客户端刷新页面时,他需要获取最早的(并且是生存的)ID。这意味着我在客户端的jquery/javascript必须知道他在页面上获得的ID,什么是最好的方法?
  • 最后一件事是我找不到适用于asp.net(C#)的优质(不昂贵) cometd 库/api。有没有人使用过 cometd 库,效果很好?我们正在寻找一个站点,该站点应该能够每时每刻有2000个 cometd 连接。
  • 最佳答案



    我认为这没什么大不了的,因为从请求到提供新数据之间的时间很短。在上一个成功之后,我将在客户端实例化一个新的XMLHttpRequest。您可以向服务器发送最后收到的数据(如果不是太大的话),这样它就可以将该数据与服务器上的当前数据进行比较,并且仅在有新数据可用时才将其发送回去。



    我不能完全确定我理解您的意思,但是如果我是对的,您可以将每个名称/值对存储在一个对象中。当新变量到达客户端时,它不会覆盖现有数据。当某个变量已经存在时,将使用最新值进行更新。它可能看起来像:

    { first_variable: 345,
      second_one: "foo",
      and_the_third: ["I", "am", "an", "array,", "hooray!"]
    }
    

    second_one的新状态到达时,例如"bar",对象更新为:
    { first_variable: 345,
      second_one: "bar",
      and_the_third: ["I", "am", "an", "array,", "hooray!"]
    }
    



    我没有使用ASP.NET的经验,但是您是否需要这样的库?您不能只是自己编写服务器端代码,就像我说的那样,它使连接保持打开状态并定期(连续)比较当前状态和先前发送的状态吗?

    更新:为了显示在服务器端保持连接打开并不难,我将向您展示我在PHP中编写的长时间轮询模拟:
    <?php
      sleep(5);
    ?>
    <b>OK!</b>
    

    无需让进程sleep停留几秒钟,您可以轻松地在循环中测试状态的变化。而不是发送任意HTML元素,您可以将数据发送回去,例如以JSON表示法。我无法想象在ASP.NET/C#中很难做到这一点。

    09-20 06:36