Question

Quelle est la meilleure façon d'envoyer les données du client au serveur?

Le code exemple que je utilise est de Comment puis-je mettre de base « Polling Long »?

Était-ce utile?

La solution 3

Oui, il suffit d'utiliser la seconde connexion au serveur. C'est ce que la plupart des cadres font, notamment IIRC Bayeux protocole . Si vous trouvez que vous avez réellement besoin de cette deuxième connexion, l'inquiétude à ce sujet alors.

Voici un code long polling modifié de mon lien ci-dessus:

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);

Qu'est-ce que Moishe parlait avec la file d'attente est que js ne garantit pas que les requêtes XHR seront reçues dans l'ordre que vous les EXPEDIE. Les messages ne seront pas perdus (ou du moins ils n'ont pas été dans mes tests), et ce n'est pas un problème de longue interrogation spécifique, mais quelque chose à prendre en compte chaque fois que vous utilisez XHR envoyer.

Alors, voici le code de file d'attente:

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();
};

Deux choses à noter. Tout d'abord, il y a un peu de retard juste si vous envoyez beaucoup de messages et la file d'attente se remplit. Il est préférable de trouver un moyen d'envoyer toute la file d'attente à chaque fois, plutôt que pièce par pièce. Une façon de le faire est de convertir les messages dans un tableau JSON, et décoder sur le serveur.

En second lieu, s'il y a une erreur d'envoyer le message, alors vous avez perdu le message. Il doit y avoir un peu de code qui soit pousser le dos un message a échoué sur la file d'attente, ou à supprimer jusqu'à ce que il y a le succès.

Autres conseils

Il suffit d'utiliser XHR pour faire un POST.

Un problème est sur certains navigateurs, vous ne pouvez avoir 2 (ou un nombre n) connexions simultanées par serveur XHR. Vous pouvez contourner ce problème en faisant une file d'attente qui vous permet d'afficher tous les messages en attente lorsque le XHR en cours se termine, puis remplir une nouvelle file d'attente jusqu'à ce poste est terminée, et dans les deux sens.

L'envoi des données au serveur est juste une demande standard. XHR est bien, ou JSONP, quel que soit votre bateau flotte.

Ne pas confondre le long scrutin; le long sondage existe seulement comme un moyen d'envoyer du serveur au client. Envoi de données du client vers le serveur est ce que le web a été d'environ depuis sa création, et une demande de XHR normale est tout ce que vous avez besoin.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top