1

問題

次のコードを使用して、UIを常に正確に保ちます。しかし、私はわずかな1秒の遅延が嫌いです。現在、UIの更新やページのその他の重要な情報に関するいくつかのキーのみを含む小さなJSONファイルのみが返されます。

これまでの私のスクリプト:

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サーバーはアプリケーション/プロジェクト自体の主要な側面の1つであるため、この分野では他のソリューションでは十分ではありません)。

だから心に留めておいてください:

これは、自分のコンピューターによってホストされているローカルサーバーです。一度に実際に接続できるのは1つまたは2つのデバイスのみです(WiFi経由でホストのLANに接続します)。

ああそして...

悲しいパンダ」(@Dave Newton:P)は、データ使用量が最大になることを心配しています...心配しないでください。これは、モバイルデバイスがWiFi経由で接続されている場合にのみ使用されます。アプリケーションを実行している人のLANに接続する必要があるため、それ以外の場合でも機能しません(誰かがポート転送した場合を除きますが、誰かがそれを望んでいる理由はわかりません)。

4

1 に答える 1

1

コメントによると、websockes、comet、または独自の手巻きロング ポーリング ソリューションを使用するのが最適です。

迅速なリクエストは悪いことです (tm)

あなたが目指しているのは、サーバーからのデータを待っている間、単一の接続を開いたままにしておくことです。接続が切断された場合は、次のリクエストを開始して、もう一度待ちます。

.NET を使用しているので、通信チャネルを管理するためにSignalRを検討することを強くお勧めします。多くの異なるホスティング オプション (ASP.NET、独自のアプリ ドメインでの自己ホストなど) をサポートしているため、非常に適しているはずです。

しかし、あなたはサーバーを自分で書くことがこのプロジェクトの鍵だとおっしゃっています。これは学術的な演習だと思います。そうでない場合は、車輪の再発明をしている可能性が高いです。SignalR がクライアントへのオープンな通信チャネルを維持する方法を実装する方法を調べてください。ここでのポイントは、サーバーに対して頻繁にリクエストを行いたくないということです。

于 2012-06-08T23:06:34.143 に答える