Frage

Was ist der beste Weg, um Daten vom Client an den Server zu senden?

Der Beispielcode, den ich verwende, stammt aus Wie implementiere ich grundlegende "lange Umfragen"?

War es hilfreich?

Lösung 3

Ja, nutzen Sie einfach die zweite Verbindung zum Server. Dies ist, was die meisten Frameworks tun, einschließlich IIRC die Bayeux -Protokoll. Wenn Sie herausfinden, dass Sie diese zweite Verbindung tatsächlich benötigen, machen Sie sich dann Sorgen.

Hier ist ein langwieriger Code, der aus meinem obigen Link geändert wurde:

var userid = Math.ceil(1000000*Math.random()).toString(16).toUpperCase();
var startLongpoll = function() {
    $.ajax({
        type:"POST", async:true, cache:false, timeout:0, 
        data: {userid: userid},
        success: function(data){
            _outCallback(data);
            setTimeout( startLongpoll, 10 );
        },
        error: function(xhr, textStatus, errorThrown){
            _errCallback(textStatus+" ("+errorThrown+")");
            setTimeout( startLongpoll, 5000 );
        },
    });
};
setTimeout(startLongpoll,10);

Was Moishe mit der Warteschlange sprach, ist, dass JS nicht garantiert, dass XHRS in der Reihenfolge empfangen wird, dass Sie sie entsandt haben. Die Nachrichten sind nicht verloren (oder zumindest waren sie nicht in meinen Tests), und dies ist kein spezifisches Problem mit langer Zeit, sondern etwas zu berücksichtigen, wenn Sie mit XHR gesendet werden.

Hier ist der Warteschlangencode:

var queue = [];
var busy = false;
this.send = function(msg) {
    queue[queue.length] = msg;
    if (busy) return;
    busy=true;
    var s = function() {
        var m = queue.shift();
        $.ajax({
            type:"POST", async:true, cache:false, timeout: 5000,
            data: {userid:userid, msg:m},
            error: function(xhr, textStatus, errorThrown){
                _errCallback(textStatus + " (" + errorThrown + ")");
                if (queue.length>0) s(); else busy = false;
            },
            success: function(){
                if (queue.length>0) s(); else busy = false;
            }
        });
    }
    s();
};

Zwei Dinge zu beachten. Erstens gibt es eine Menge Verzögerung, wenn Sie viele Nachrichten senden und die Warteschlange füllt. Es ist besser, jedes Mal die gesamte Warteschlange zu finden, als Stück für Stück. Eine Möglichkeit, dies zu tun, besteht darin, die Nachrichten in ein JSON -Array umzuwandeln und auf dem Server zu dekodieren.

Zweitens, wenn ein Fehler beim Senden der Nachricht vorliegt, haben Sie die Nachricht verloren. Es muss ein bisschen Code geben, der entweder die fehlgeschlagene Nachricht wieder in die Warteschlange drückt oder sie nicht entfernen, bis es Erfolg gibt.

Andere Tipps

Verwenden Sie einfach XHR, um einen Beitrag zu machen.

Ein Problem ist bei einigen Browsern, dass Sie nur 2 (oder einige Nummer n) gleichzeitige XHR -Verbindungen pro Server haben können. Sie können dies umgehen, indem Sie eine Warteschlange erstellen, in der Sie alle Wartenachrichten veröffentlichen können, wenn der aktuelle XHR abgeschlossen ist, und dann eine neue Warteschlange ausfüllen, bis dieser Beitrag abgeschlossen ist, und hin und her.

Das Senden von Daten an den Server ist nur eine Standardanforderung. XHR ist in Ordnung oder JSONP, was auch immer Ihr Boot schwimmt.

Lassen Sie sich nicht durch die langfristige Entfernung verwirrt. Das langwierige Langwesten existiert nur als Möglichkeit, vom Server an den Client zu senden. Das Senden von Daten vom Client an den Server ist das, worum es im Web seit seiner Gründung geht, und eine normale XHR -Anfrage ist alles, was Sie brauchen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top