2010-01-04 39 views
1

J'écris une application qui diffuse la sortie (je veux dire à la fois sys.stdout et sys.stderr) d'un script python excité sur le serveur, en temps réel au navigateur. Les utilisateurs sur le site seront autorisés à sélectionner le script pour exécuter, exciter et tuer leur script choisi, et modifier certains paramètres, donc j'ai besoin d'un thread différent par utilisateur sur le site (l'utilisateur A peut démarrer, arrêter et changez un script, tandis que l'utilisateur B peut faire la même chose avec un script différent).Diffuser le résultat d'une commande dans le navigateur en utilisant Twisted et Comet

Je sais que j'ai besoin d'utiliser la comète pour les clients Web, et vu que le reste du projet est écrit en python, je voudrais utiliser torsadé pour le serveur, mais je ne suis pas vraiment sûr de ce que je besoin de faire ensuite!

Il existe un nombre déconcertant d'options (Divmod Mantissa, Divmod Nevow, twisted.web, STOMP, etc), et certains sont mieux documentés que d'autres, rendant l'ensemble plutôt délicat! J'ai une démo de travail utilisant stompservice sur orbited, en utilisant Orbited.TCPSocket pour le côté javascript des choses, mais je commence à penser que le modèle de canal STOMPs ne va pas fonctionner pour les scripts multithread, multi-running (sauf si j'ouvre un nouveau canal par passage, mais cela semble être une mauvaise utilisation du modèle de canal).

Quelqu'un peut-il me diriger dans la bonne direction, ou un exemple de code que je peux apprendre?

Merci!

+0

Pourquoi avez-vous besoin d'une comète? l'utilisateur a juste besoin de voir le statut correct? –

Répondre

0

Un exemple de service pour les clients à interrogation longue avec Twisted est slosh. Ce n'est peut-être pas ce que vous voulez, mais parce que ce n'est pas une grande structure, cela peut vous aider à comprendre comment utiliser Twisted.

1

Nevow Athena est un framework spécifiquement conçu pour les applications AJAX et COMET. En théorie, c'est exactement ce que vous cherchez. Cependant, je ne suis pas sûr qu'il soit bien utilisé ou pris en charge en ce moment - en regardant le trafic de la liste de diffusion et les résultats de la recherche google suggère que ce n'est peut-être pas le cas.

Il y a quelques tutoriels que vous pourriez regarder pour vous aider à décider à ce sujet:

le code de ce dernier semble être inclus dans la distribution Nevow lorsque vous téléchargez sous/doc/listings/partxx (Je pense ...)

1

Vous pouvez implémenter un "HTTP streaming" très simple en gardant la connexion http ouverte et en ajoutant des morceaux javascript qui mettent à jour le contenu dom. Ceci fonctionne puisque le navigateur évalue les morceaux de "script" quand ils arrivent.

j'ai écrit une entrée de blog il y a un certain temps avec un exemple en cours d'exécution en utilisant des lignes tordues et très peu de javascript: Simple HTTP streaming with Twisted & Javascript

Vous pouvez facilement mélanger ce modèle avec un motif éditeur/abonné pour le rendre multi-utilisateur, etc. Je utilisez ce modèle pour regarder les flux de journaux en direct via le Web.