【问题标题】:How to add in comet implementation in a ASP.Net MVC3 website? [closed]如何在 ASP.Net MVC3 网站中添加彗星实现? [关闭]
【发布时间】:2011-08-10 20:57:47
【问题描述】:

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

[已删除]

基本上计数器会下降,每次有人对该项目出价时,计数器都会重置为 15 秒。

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

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

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

我在这里需要彗星还是有更好的选择?

【问题讨论】:

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


    【解决方案1】:

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

    我最近对彗星进行了一些测试和研究(我在即将进行的项目中需要它),我发现 FrozenmountainPokeInWebsync /strong> 是迄今为止最好的选择。编写自己的实现只是 2 个困难和 2 个耗时。只需很小的价格,您就可以启动并运行出色的产品。

    2012 年 2 月 19 日编辑

    有一个新的选择。

    SignalR

    【讨论】:

    • 你怎么知道他们没有使用彗星?
    • 就像我说的,当您打开 Firebug 时,您可以看到他们正在发出 ajax GET 请求并以全新的新值返回 JSON。打开站点时只需打开 Firebug 和控制台。
    • 哇,没想到Firebug让你看到了!谢谢你。 :)
    【解决方案2】:

    我过去所做的是在 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

    【讨论】:

      【解决方案3】:

      This blog post 展示了如何将实时股票计数器添加到 ASP.NET MVC 3 应用程序。这听起来与您正在寻找的功能非常相似,因此可能很有用。

      解决方案/博客文章使用了我工作的托管服务 Pusher,因此您完全无需担心实时基础架构。它还使用最终将取代轮询或任何其他类型的实时机制(如 http 长轮询或 http 流)的 WebSocket。

      【讨论】:

        猜你喜欢
        • 2013-02-09
        • 2011-12-28
        • 2013-04-07
        • 2010-11-06
        • 1970-01-01
        • 2011-04-21
        • 2011-02-16
        • 1970-01-01
        • 2012-10-24
        相关资源
        最近更新 更多