ASP.NET - 从服务器向所有客户端推送消息的Comet技术

5
我正在开发一个应用程序,使用服务器端变量每秒更改。每秒钟,所有打开网页的客户端都需要显示这些新变量。
现在大多数人告诉我要使用comet,因为我需要每秒推拉数据,现在我有几个问题:
1.从客户端拉取数据还是从服务器推送数据,哪种方案更好?
2.服务器端的项目ID(带有变量的ID)可能会更改,当客户端刷新页面时,他需要获取最旧的(和存在的)ID。这意味着客户端上的jquery / javascript 必须知道页面上有哪些ID,最好的方法是什么?
3.最后一件事是我找不到一个好的(不太昂贵的)asp.net(C#) comet库/ api。是否有人曾经使用过具有良好结果的comet库?我们正在考虑一个可以同时拥有2000个comet连接的站点。
3个回答

5

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


该库本身相当昂贵。 - arviman

3

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

快来查看吧,还有一个免费的社区版可供使用。


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

最后一件事是我找不到一个好的(价格不贵的)用于asp.net(C#)的comet库/ api。有人使用过效果好的comet库吗?
我没有任何ASP.NET的经验,但你需要这样的库吗?你不能自己编写服务器端代码吗?正如我所说,这会保持连接打开,并定期(连续)将当前状态与先前发送的状态进行比较。
更新:为了证明在服务器端保持连接不难,我将向你展示我在PHP中编写的长轮询模拟:
<?php
  sleep(5);
?>
<b>OK!</b>

不要让进程沉睡几秒钟,你可以在循环中轻松测试状态的变化。并且,不要发送任意的HTML元素,可以将数据以JSON格式返回。我想在ASP.NET/C#中做到这一点不会太难。


我在最后一件你提到的事情上找到了一些好的教程,保持连接开启并接收发送http请求。现在的问题是,如果我自己编写每个部分,我不知道速度会有多快。今天稍后我会尝试一下,但可能需要很长时间。此外,当页面加载时,我有4个标准的div应该获得一个ID。之后每秒更新一次,它会查看div的ID并将正确的值放在那里。这很像你现在经常看到的竞价拍卖。无论如何,感谢你的回复!希望更多人能够回应。 - Julian
@Julian - 我仍然不确定我是否正确理解了你的意思。在JavaScript中操作DOM现在非常容易。如果需要,您可以随时提出新问题,但是在SO上已经有很多问题。而且我不参加我们国家的竞价拍卖。 ;) - Marcel Korpel
是的,也许只有我这样想。我通常是一个C# Winform开发人员,还没有涉及到HTML/JavaScript方面。但我们需要构建的应用程序不像一分钱拍卖,但你可以想象每秒钟更新的相同类型。 - Julian
@Julian - 顺便说一下,如果需要非常精确(例如,所有客户端在同一时刻更新其屏幕很重要),那就算了吧。HTTP从未被设计用于这种方式。 - Marcel Korpel
嗯...目前我也在研究使用webservice的ajax/json解决方案。如果你用jquery自己编写,而不使用常规的ajax内置功能,速度应该会很快。我一直在研究那些竞拍网站,它们似乎每秒钟都发送json消息,至少在firebug中是这样显示的。 - Julian
@Julian - 请注意,jQuery仅是JavaScript的一个框架,您仍在使用“正常的ajax内置工具”(XMLHttpRequests)。同时,请查看meta的聊天室,该聊天室与您提到的那些网站相同。 - Marcel Korpel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接