保持我的 UI 更新,而不会因请求而终止服务器



问题

我使用以下代码来不断保持我的 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牛顿:P)担心他们的数据使用量最大化......不用担心。 仅当您的移动设备通过WiFi连接时,才会使用此功能。 否则它甚至无法工作,因为它必须连接到运行应用程序的人的 LAN(除非有人端口转发它,但我认为没有人想这样做)。

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

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

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

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

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

最新更新