ASP.NET - проблема с тяжелым соединением с AJAX / JQUERY - PullRequest
4 голосов
/ 21 августа 2010

Я написал скрипт обновления, который каждую секунду обновляет несколько div'ов информацией о сервере.Теперь проблема в том, что это кажется довольно интенсивным использованием, в google chrome моя мышечная анимация даже продолжает загружаться.

Я надеюсь, что кто-нибудь подскажет, как улучшить этот скрипт или, возможно, нашел другое решение.

Здесьмоя страница aspx:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default2.aspx.cs" Inherits="Default2" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns='http://www.w3.org/1999/xhtml' >
<head id="Head1" runat='server'>
    <script src="Scripts/jquery-1.4.1.js" type="text/javascript"></script>
<script src="Scripts/jquery.countdown.js" type="text/javascript"></script>

    <title>Page</title>

</head>
<body>
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server">
    </asp:ScriptManager>



<script type="text/javascript">
    $(function hello() {
        // function that does something exciting? 
        var liftOff = function () {
            // ....  
        };

        // Get a date that is some (short) time in the future 
        var getDeadline = function () {
            var shortly = new Date();
            shortly.setSeconds(shortly.getSeconds() + 5.5);
            return shortly;
        };

        // Attach click handler to all our buttons 
        $("button.resetButton").click(function (event) {

            $.ajax({
                type: "POST",
                url: "WebService.asmx/HelloWorld2",
                data: "{}",
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: function (msg) {},
                failure: function () { alert("Uh oh"); }
            });



        });

        function highlightLast5() {
            $.ajax({
                type: "POST",
                url: "WebService.asmx/HelloWorld",
                data: "{'number':'0'}",
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: function (msg) { $("div.shortly").countdown('change', { until: msg.d }); },
                failure: function () { alert("Uh oh"); }
            });



        }
        // Start all countdowns going on page load 
        $('div.shortly').countdown({
            until: getDeadline(),
            onTick: highlightLast5,
            onExpiry: liftOff,
            layout: '{sn}'
        });
    });

</script>


    <div class="mainpanel"> 
    <div> 
        test 
    </div> 
    <div class="shortly" > 

    </div> 
    <button id="button" type="button" class="resetButton"> 
        Reset 
    </button> 
</div>
</form>
</body>

</html>

И веб-сервис, который возвращает информацию:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;

/// <summary>
/// Summary description for WebService
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
// To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. 
[System.Web.Script.Services.ScriptService]
public class WebService : System.Web.Services.WebService {

    List<Auction> auctions;
    public WebService () {

        //Uncomment the following line if using designed components 
        //InitializeComponent(); 
        auctions = (List<Auction>)Application["Auction"];
    }

    [WebMethod]
    public string HelloWorld(int number) {

        return auctions[0].seconds.ToString();
    }

    [WebMethod]
    public void HelloWorld2()
    {
        auctions[0].seconds = 30;

    }

}

Теперь, как вы можете видеть, как скрипт jquery получает данные каждую секунду, это как бы необходимо, потому чтоэто для живого аукциона.Если я использую этот сценарий на реальном сервере, когда я пытался, он зависает примерно через 2 минуты из-за интенсивного использования, к сожалению, только с одним открытым клиентом.Поэтому всякий раз, когда больше клиентов будет использовать сценарий одновременно, я получу реальную проблему.

Ответы [ 2 ]

3 голосов
/ 21 августа 2010

О технике кометы.

Вот аналогичный вопрос с ответом. Отправка сообщений клиентам из серверного приложения?

Комета не вызывает сервер каждую секунду, а просто открывает соединение, которое остается открытым со стороны сервера, когда на сервере что-то естьвоспроизвести его воспроизведение и закрыть соединение, и так далее ...

http://en.wikipedia.org/wiki/Comet_(programming))

http://www.frozenmountain.com/websync/

http://www.aaronlerch.com/blog/2007/07/08/creating-comet-applications-with-aspnet/

3 голосов
/ 21 августа 2010

Поскольку вам нужна потоковая передача данных в реальном времени, вы можете попробовать реализовать Comet , скажем, WebSync . Вы можете значительно увеличить производительность, и она будет более масштабируемой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...