【问题标题】:ASP.NET - Comet Pushing messages from server to all clientsASP.NET - Comet 将消息从服​​务器推送到所有客户端
【发布时间】:2011-04-02 15:00:08
【问题描述】:

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

现在大多数人告诉我选择彗星,因为我需要每秒推/拉数据,现在我有几个问题:

  • 考虑到我每秒钟都需要新数据(从客户端拉取还是使用服务器推送)这一事实,有什么更好的解决方案?

  • 此外,服务器端的项目 ID(使用该 ID 获得的变量)可以更改,当客户端刷新页面时,他需要获取最旧的(和有效的)ID。这意味着我在客户端的 jquery/javascript 必须知道他在页面上获得了哪个 ID,最好的方法是什么?

  • 最后一件事是我找不到适用于 asp.net (C#) 的好(不至于昂贵)彗星库/api。有人曾经使用过效果很好的彗星库吗?我们正在寻找一个每时每刻都能连接 2000 个彗星的网站。

【问题讨论】:

    标签: c# javascript asp.net comet


    【解决方案1】:

    PokeIn ASP.NET ajax 库中有一个 SendToAll 函数。

    【讨论】:

    • 图书馆本身很贵。
    【解决方案2】:

    WebSync by Frozen Mountain 是一个成熟的可扩展彗星服务器,用于 IIS 和 ASP.NET。它无缝集成到您的应用程序堆栈中,以支持与每个服务器节点的数千个客户端进行实时数据通信。

    看看吧,有一个免费的社区版。

    【讨论】:

      【解决方案3】:

      什么是更好的解决方案 看着我需要的事实 每秒钟都有新数据,从 客户端还是服务器推送?

      我认为这并不重要,因为请求之间的时间和新数据可用的时间相当短。在前一个成功后,我将在客户端实例化一个新的 XMLHttpRequest。您可以向服务器发送最后接收到的数据(如果不是太大),以便它可以将该数据与服务器上当前可用的数据进行比较,并且仅在有新数据可用时才发回一些数据。

      还有商品 ID 服务器端(带有变量的那个 ID got) 可以改变,当客户端 刷新他需要获取的页面 最古老的(和活着的)身份证。这个会 意味着我的 jquery/javascript 在 客户端必须知道他是哪个ID 进入页面,最好的方法是什么 这样做?

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

      { 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!"]
      }
      

      最后一件事是我找不到好的 (不贵)彗星库/api 对于 asp.net (C#)。任何人曾经使用过 彗星库效果不错?

      我没有任何 ASP.NET 经验,但是您需要这样的库吗?难道你不能自己编写服务器端代码,正如我所说,它使连接保持打开状态并定期(持续)将当前状态与之前发送的状态进行比较?


      更新:为了表明在服务器端保持连接打开并不难,我将向您展示我用 PHP 编写的长轮询模拟:

      <?php
        sleep(5);
      ?>
      <b>OK!</b>
      

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

      【讨论】:

      • 我确实找到了一些关于你提到的最后一件事的好教程,保持连接打开并接收发送 http 请求。现在的问题是,如果我自己编写每个部分,我不知道它会有多快。无论如何,我今天晚些时候会尝试,但可能需要很长时间。此外,我有 4 个标准 div,它们应该在页面加载时获得一个 ID。在此之后,它每秒都会更新它查看 div 的 ID 并将正确的值放在那里。这很像你现在看到的那些便士拍卖。无论如何感谢您的回复!希望更多人做出反应。
      • @Julian – 我仍然不确定我是否理解正确。如今,在 JavaScript 中操作 DOM 非常容易。如有必要,您可以随时提出新问题,但 SO 上已经存在许多问题。而且我不参加我们国家的便士拍卖。 ;)
      • 是的,也许只有我一个人。我通常是 C# winform 开发人员,还没有真正进入 html/javascript 的东西。但是我们需要构建的应用程序不像一分钱拍卖,但你可以想到每秒更新一次。
      • @Julian – 顺便说一句,如果它必须非常精确(例如,所有客户端同时更新他们的屏幕很重要),那就忘了它。 HTTP 从未被设计为以这种方式使用。
      • Hmmm.. 目前我也在研究带有 web 服务的 ajax/json 解决方案。如果你自己用 jquery 编写它并且不使用普通的 ajax 内置的东西,它应该很快。我一直在研究那些便士拍卖网站,它们也每秒发送一次 json 消息,至少在 firebug 上看起来是这样的。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-06-20
      • 2010-09-25
      • 2019-11-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多