2009-12-23 7 views
4

Dans l'application de discussion générale, le navigateur du client interroge toujours le serveur pour rechercher de nouveaux messages.Transfert de données du serveur vers le navigateur via http

// the function to check new messages in server 
function check(){ 

    // but this question is less about jQuery. 
    $.ajax({ 
    type: "POST", 
    url: "check.aspx", 
    data: "someparam=123", 
    success: function(msg){ 

     // process msg here 

     // CHECK IT AGAIN, but sometimes we need to make delay here 
     check(); 
    } 
    }); 
} 

Puis je lis Nicholas Allen's blog about Keeping Connections Open in IIS.

Il me fait penser s'il est possible de pousser les données de mon serveur vers le navigateur du client par transfert HTTP tronqué (cela signifie que le streaming, non?) Et garder la connexion ouverte.

tout en maintenant la connexion ouverte, dans le serveur, j'ai l'idée de garder quelque chose à courir pour vérifier les nouveaux messages. quelque chose comme ça, peut-être

while(connectionStillOpen) { 
    // any new message? 
    if(AnyMessage()) 
    { 
     // send chunked data, can I? 
     SendMessageToBrowser(); 
     // may be we need to make delay here 
     Sleep(forSomeTime); 
    } 
} 

c'est une idée brute.

Mon application de chat créée dans ASP.net. Avec mon moins de compréhension de WCF et de module avancé de streaming IIS, j'ai besoin de vos conseils pour mettre en œuvre cette idée.

Oui, Impossible est probablement la réponse. Mais j'ai besoin de savoir pourquoi si c'est toujours impossible.

MISE À JOUR (3 ans plus tard):

C'est exactement ce que je cherchais: Microsoft ASP.NET SignalR

Répondre

2

Oui, il est impossible de pousser les données du serveur directement sur votre navigateur client.

Mais vous pouvez vérifier les nouveaux messages du serveur toutes les 3 secondes, par exemple, et actualiser votre interface client.

Peut-être que vous voulez jeter un oeil sur certains Comet implementations

+0

une bonne ressource. Merci. –

0

Une méthode est là qui est appelée AJAX inversée. En utilisant quel serveur peut transférer des données au client sans aucune demande du client.

+0

un lien pour cela? –

+0

Le code suivant le démontre - http://www.codeproject.com/KB/custom-controls/CometMultiClient.aspx – Devi

0

La génération actuelle de bibliothèques JavaScript/Ajax ne donne pas accès aux réponses partielles; vous ne recevez une notification que lorsque la requête est complète.

Si vous êtes ouvert à l'utilisation de Silverlight, vous pouvez utiliser une connexion TCP brute. Comet est une autre option - mais c'est essentiellement une longue interrogation qui provient toujours du script côté client.

2

Un serveur ne peut pas initier la communication avec le client. Ainsi, le serveur ne peut pas transmettre les données au client. Mais vous pouvez réaliser le mécanisme de poussée en utilisant "Reverse AJAX". L'article suivant devrait apporter plus de lumière.

Reverse AJAX

0

Ce ne est pas possible de pousser les données du serveur. Parce que HTTP ne répond qu'aux requêtes et ne peut pas contacter directement le client. Mais nous avons une solution ici appelée COMET ou ReverseAJAX, en utilisant cette technique, nous pouvons simuler les appels en duplex.

Son rien mais la longue AJAX vivant appels, et répondra au client s'il y a un événement attendu qui se passe à côté du serveur, sinon il reste calme. Cette comète (programmation) article wikipedia explique plus sur l'approche

J'Answerd question similaire ici asp-net-chat-with-wcf. pls vérifier

Questions connexes