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

我正在使用服务器端变量进行应用程序,每秒都会发生变化.每一秒都需要在所有打开网页的客户端上显示这些新变量.

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

>什么是更好的解决方案,看看我需要新数据EVERY SECOND,从客户端拉出或推送服务器?
>此外,服务器端的项目ID(具有该ID的变量)可以更改,当客户端刷新页面时,他需要获取最旧(和生存)的ID.这意味着我在客户端的jquery / javascript必须知道他在页面上得到了哪个ID,最好的方法是什么?
>最后一件事是我找不到一个好的(不贵)彗星库/ api for asp.net(C#).有没有人用过彗星图书馆,效果很好?我们正在寻找一个应该能够随时拥有2000个彗星连接的站点.

最佳答案

What would be a better solution
looking at the fact that I need the
new data EVERY SECOND, pulling from
the client or pushing with the server?

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

Also the item ID’s that are on the
server side (with the variable’s that
ID got) can change and when the client
refreshes the page he needs to get the
oldest (and living) ID’s. This would
mean that my jquery/javascript on the
client side must know which ID’s he
got on the page, what is best way to
do this?

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

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

Last thing is that I can’t find a good
(not to expensive) comet library/api
for asp.net (C#). Anyone ever used a
comet library with good results?

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

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

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

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

转载注明原文:c# – ASP.NET – Comet将消息从服​​务器推送到所有客户端 - 代码日志