2009-01-13 7 views
1

Je suis en train de prototyper un mécanisme de notification en temps réel utilisant http sur le port 80. Le but du projet est de permettre à une application Flash de répondre rapidement à un événement sur un serveur distant. L'interrogation est une approche, mais elle est trop lente. Actuellement, j'utilise une connexion socket pour obtenir une notification de latence faible des événements sur le serveur, ce qui fonctionne bien mais n'est pas compatible avec les pare-feu. Je ne veux rien installer sauf Flash, ou Silverlight sur le client. La compatibilité croisée des navigateurs n'est pas une préoccupation - dans cette application, je peux spécifier quel navigateur le client utilise mais IE est préféré.Puis-je recevoir un flux sur HTTP avec JavaScript, Flash ou Silverlight?

J'ai fait un serveur HttpHandler dans .NET qui ne ferme jamais la connexion et envoie les "événements" au client en écrivant des octets au flux de réponse http (ConnectedClientContext.Response.OutputStream.Write etc) et j'ai une application client .NET qui peut lire ces messages d'accord.

Ma question:

Puis-je recevoir les octets du serveur via HTTP comme ils arrivent en utilisant JavaScript, Flash ou Silverlight? Jusqu'à présent, je ne peux trouver un moyen d'être informé de la "progression du téléchargement" et ne pas obtenir les octets réels jusqu'à ce que la réponse est fermée - je les veux comme ils arrivent.

Cordialement,

Daniel

Répondre

1

Je ne sais pas à propos de Flash, mais en Javascript (par lequel vous dire dans le navigateur) et Silverlight vous êtes limité à peu près au protocole http. Vous pouvez utiliser AJAX Http Streaming pattern. Les idées de base qui diffèrent de ce que vous essayez est que dès que les données sont disponibles, la requête en attente se termine et une nouvelle est immédiatement lancée de manière asynchrone, ce qui signifie que votre client traite les données nouvellement arrivées. Silverlight vous donne plus d'options puisque la pile HTTP est purement asynchrone, mais vous pouvez mettre la main sur le flux dès que les données commencent à arriver en réglant le HttpWebRequest.AllowReadStreamBuffering sur false. (Contrairement à XmlHttpRequest qui tamponne toujours).

1

Il est très facile d'utiliser les idées Comet pour les notifications. vous n'avez même pas besoin d'utiliser un cadre spécifique aux comètes. faites simplement une requête ajax avec un callback sur réponse, enveloppez ceci sur une boucle et vous avez une boucle d'événement, juste comme une application graphique. côté serveur, ne vous embêtez pas à répondre à la requête tant qu'il n'y a pas d'événement ou de timeout (ce qui est juste un événement 'null').

Questions connexes