ASP.NET - Comet将消息从服​​务器推送到所有客户端

时间:2010-08-23 12:20:21

标签: c# javascript asp.net comet

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

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

  • 什么是更好的解决方案,我需要新的数据EVERY SECOND,从客户端拉出或推送服务器?

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

  • 最后一件事是我找不到一个好的(不贵)彗星库/ api for asp.net(C#)。有没有人用过彗星图书馆,效果很好?我们正在寻找一个应该能够随时拥有2000个彗星连接的站点。

3 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:3)

Frozen Mountain的

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

查看它,可以免费获得社区版。

答案 2 :(得分:2)

  

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

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

  

还有项目ID   服务器端(使用变量的那个   ID得到)可以改变,当客户端   刷新他需要的页面   最古老(和生活)的ID。这个会   意思是我的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的任何经验,但您是否需要这样的库?难道你不能自己编写服务器端代码,正如我所说,这使得连接保持打开状态并定期(不断地)将当前状态与之前发送的状态进行比较?


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

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

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