我正在使用以下代码来不断保持我的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连接时才会使用此选项。它甚至不会起作用,因为它必须连接到运行应用程序的人的局域网(除非有人端口转发它,但我认为没有人愿意这样做)。
答案 0 :(得分:1)
根据评论,使用websockets,comet或你自己的手动长轮询解决方案将是最好的。
快速火灾请求是一件坏事(tm)
您的目标是尽可能长时间地保持单个连接等待来自服务器的数据。如果连接断开,则启动下一个请求并再次等待。
当您使用.NET时,我强烈建议您查看SignalR来管理您的通信渠道。它支持许多不同的托管选项(ASP.NET,在您自己的应用程序域中自托管等),因此应该非常适合。
但是,你说自己编写服务器是这个项目的关键。我认为这是一个学术练习 - 如果没有,你最有可能重新发明轮子。去看看SignalR如何实现维护到客户端的开放式通信通道。这里的要点是你不想经常向服务器发出请求。