如何在ASP.Net MVC3网站中添加彗星实现?

时间:2011-08-10 20:57:48

标签: c# comet asp.net-mvc-3

我正在尝试让我的网站具有与此类似的功能:

[移除]

基本上计数器会关闭,每次有人对该项目进行投标时,计数器会重置为15秒。

我怀疑我需要使用彗星之类的实现,不是吗?我在这个评估中是否正确?

我认为该页面上的每次拍卖都不会一直在ping服务器以获取更新,而是服务器正在发送消息“嘿,有人在这里出价!”到网站。

这就是问题,我从来没有像网站上的行为一样彗星,根据这个question(非常过时),在ASP.Net中很难做到。

我需要彗星吗?还是有更好的选择?

3 个答案:

答案 0 :(得分:4)

根本不使用彗星。正如您在firebug中看到的那样,它一直在执行ajax请求并接收JSON来更新数据。

LanceLivre

我最近做了一些测试&用彗星研究(我在即将开展的项目中需要它),我发现 Frozenmountain PokeIn 中的 Websync 是目前为止最好的选择。编写自己的实现只需要2个难度,2个耗时。只需很少的价格,您就可以拥有一个正常运行的。

编辑19/02/2012

有一种新选择。

SignalR

答案 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);
    }

MVC控制器

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流。