保持我的UI更新而不杀死带有请求的服务器

时间:2012-06-08 20:32:02

标签: javascript .net httplistener

问题

我正在使用以下代码来不断保持我的UI准确。我不喜欢轻微的一秒延迟。它目前只返回一个小的JSON文件,其中只有几个关于UI更新的关键以及该页面的其他重要信息。

我的脚本远:

function parseDynamicData(ard) {
    if (ard['details']['enabled'] == 'true' && ard['song']['art'] != 'undefined');
    {
        if (document.location.toString().indexOf('#offline') != -1)
            document.location = '/#tracks';
        $('#track-title').html(htmlDecode(ard['song']['title']));
        $('#track-artist').html(htmlDecode(ard['song']['artist']));
        $('#track-album').html(htmlDecode(ard['song']['album']));
        $('#track-art').attr('src', htmlDecode(ard['song']['art']));
        if (htmlDecode(ard['details']['playing']) == 'true') {
            $('#control-pauseplay').html('Pause');
            $('#control-pauseplay').attr('href', '/track?proc=2');
        } else {
            $('#control-pauseplay').html('Play');
            $('#control-pauseplay').attr('href', '/track?proc=3');
        }
    }
}

function updateLoop() {
    $.ajax({
        url: '/jtrack',
        dataType: 'json',
        cache: false,
        async: false,
        success: parseDynamicData,
        error: function (xhr) {
            document.location = '#offline';
        },
        complete: function (x, y) {
            setTimeout(updateLoop, 3000);
        }
    });
}

$(document).ready(function () {
    setTimeout(updateLoop, 1500);
});

我的问题

我能安全地提出这些要求的速度有多快?我在移动设备(例如iPhone或Android)上运行它,所以我认为我不需要经常这样做。他们是更好的方式吗?如果是这样,我如何使用.net HttpListener服务器实现这一目标?

主要警告:

这是我正在做的项目的一部分。问题是这个连接的服务器是一个HttpServer 我在VB.net中编写了。我不是最熟练的人,但是这个服务器是专门为我的项目设计的(没有其他解决方案在这个领域真的足够,因为Http Server是应用程序/项目本身的主要方面之一)。

请记住:

这是由您自己的计算机托管的本地服务器。一次只能连接一个或两个设备(通过WiFi连接到主机的LAN)。

哦,......

对于所有你“悲伤的熊猫”(@Dave Newton:P)担心他们的数据使用量最大化...不要担心。仅当您的移动设备通过WiFi连接时才会使用此选项。它甚至不会起作用,因为它必须连接到运行应用程序的人的局域网(除非有人端口转发它,但我认为没有人愿意这样做)。

1 个答案:

答案 0 :(得分:1)

根据评论,使用websockets,comet或你自己的手动长轮询解决方案将是最好的。

快速火灾请求是一件坏事(tm)

您的目标是尽可能长时间地保持单个连接等待来自服务器的数据。如果连接断开,则启动下一个请求并再次等待。

当您使用.NET时,我强烈建议您查看SignalR来管理您的通信渠道。它支持许多不同的托管选项(ASP.NET,在您自己的应用程序域中自托管等),因此应该非常适合。

但是,你说自己编写服务器是这个项目的关键。我认为这是一个学术练习 - 如果没有,你最有可能重新发明轮子。去看看SignalR如何实现维护到客户端的开放式通信通道。这里的要点是你不想经常向服务器发出请求。

相关问题