1

问题

我正在使用以下代码来不断保持我的 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 服务器来实现这一点?

主要警告:

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

所以请记住:

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

哦,还有...

对于所有担心让他们的数据使用量最大化的“悲伤熊猫”(@Dave Newton:P)……别担心。这仅在您的移动设备通过 WiFi 连接时使用。否则它甚至不会工作,因为它必须连接到运行应用程序的人的 LAN(除非有人端口转发它,但我认为没有人愿意这样做)。

4

1 回答 1

1

根据评论,最好选择 websockets、comet 或您自己的手动长轮询解决方案。

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

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

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

但是,您说自己编写服务器是这个项目的关键。我认为这是一个学术练习——如果不是,你很可能是在重新发明轮子。去看看 SignalR 如何实现维护与客户端的开放通信通道。这里的重点是你不想频繁地向服务器发出请求。

于 2012-06-08T23:06:34.143 回答