我正在尝试让我的网站具有与此类似的功能:
[移除]
基本上计数器会关闭,每次有人对该项目进行投标时,计数器会重置为15秒。
我怀疑我需要使用彗星之类的实现,不是吗?我在这个评估中是否正确?
我认为该页面上的每次拍卖都不会一直在ping服务器以获取更新,而是服务器正在发送消息“嘿,有人在这里出价!”到网站。
这就是问题,我从来没有像网站上的行为一样彗星,根据这个question(非常过时),在ASP.Net中很难做到。
我需要彗星吗?还是有更好的选择?
答案 0 :(得分:4)
根本不使用彗星。正如您在firebug中看到的那样,它一直在执行ajax请求并接收JSON来更新数据。
我最近做了一些测试&用彗星研究(我在即将开展的项目中需要它),我发现 Frozenmountain 和 PokeIn 中的 Websync 是目前为止最好的选择。编写自己的实现只需要2个难度,2个耗时。只需很少的价格,您就可以拥有一个正常运行的。
编辑19/02/2012
有一种新选择。
答案 1 :(得分:1)
我过去所做的是使用MVC中的Async Actions获得相同的结果。
基本上你需要的是一个异步MVC控制器,它可以保存请求,直到服务器中发生了某些变化。
您的客户端将向服务器发送ajax请求,请求将在异步操作中等待,直到服务器中的某些内容发生变化,然后返回到客户端,客户端处理请求,并向服务器发送另一个请求等待更多变化。这将为您提供您正在寻找的即时反馈,
我已经实现了类似但没有使用Asycn控制器的东西(因为这个应用程序不会有很多优秀的用户。)但是这个想法是一样的,你只需要将它转换为Async,如果你需要它可以扩展为很多用户。
[HttpGet]
public JsonResult Comet(string message)
{
MiniProfiler.Stop(true);
var currentMessage = GetCurrentMessage();
while (message == currentMessage)
{
Thread.Sleep(250);
currentMessage = GetCurrentMessage();
}
return Json(currentMessage, JsonRequestBehavior.AllowGet);
}
https://github.com/kayone/NzbDrone/blob/master/NzbDrone.Web/Controllers/NotificationController.cs
https://github.com/kayone/NzbDrone/blob/master/NzbDrone.Web/Scripts/Notification.js
答案 2 :(得分:0)
This blog post显示了如何将实时股票计数器添加到ASP.NET MVC 3应用程序。这听起来与您正在寻找的功能非常相似,因此很有用。
解决方案/博客文章使用Pusher,我工作的托管服务,因此您根本不需要担心实时基础架构。它还使用WebSockets,它最终将取代轮询或任何其他类型的实时机制,如http长轮询或http流。