Je suis à la recherche d'un serveur HTTP Python multithread bien supporté qui supporte les réponses d'encodage en bloc. (C'est-à-dire "Transfer-Encoding: chunked" sur les réponses). Quelle est la meilleure base de serveur HTTP pour commencer à cet effet?Serveur HTTP Python prenant en charge l'encodage en segments?
Répondre
Supports torsadés chunked transfer encoding (API link) (voir également le document API pour HTTPChannel). Il existe un certain nombre de projets de production utilisant Twisted (par exemple, Apple l'utilise pour le serveur iCalendar sous Mac OS X Server), il est donc très bien supporté et très robuste. Twisted prend en charge le transfert en blocs et il le fait de manière transparente.
Je suis presque sûr que les serveurs compatibles WSGI devraient prendre en charge cela. Essentiellement, les applications WSGI renvoient des blocs itératifs, renvoyés par le serveur Web. Je n'ai pas d'expérience de première main avec ceci, mais voici un list of compliant servers.
Je devrais penser qu'il serait assez facile de rouler le vôtre, si les serveurs WSGI ne répondent pas à ce que vous cherchez, en utilisant le CGIHTTPServer intégré de Python. Il est déjà multithread, donc ce serait juste à vous de partager les réponses.
c'est-à-dire que si votre gestionnaire de requêtes ne spécifie pas de longueur de réponse, Twisted passera automatiquement au transfert par blocs et générera un bloc par appel à Request.write.
j'ai réussi à le faire en utilisant Tornado:
#!/usr/bin/env python
import logging
import tornado.httpserver
import tornado.ioloop
import tornado.options
import tornado.web
from tornado.options import define, options
define("port", default=8080, help="run on the given port", type=int)
@tornado.web.stream_request_body
class MainHandler(tornado.web.RequestHandler):
def post(self):
print()
def data_received(self, chunk):
self.write(chunk)
logging.info(chunk)
def main():
tornado.options.parse_command_line()
application = tornado.web.Application([
(r"/", MainHandler),
])
http_server = tornado.httpserver.HTTPServer(application)
http_server.listen(options.port)
tornado.ioloop.IOLoop.current().start()
if __name__ == "__main__":
main()
- 1. Hébergement de serveur Microsoft SQL prenant en charge DTS
- 2. Une simple bibliothèque cliente Python IRC prenant en charge SSL?
- 3. Skype prenant en charge les URLs
- 4. Bibliothèque de génération PDF prenant en charge les remplissages dégradés
- 5. Prise en charge des segments d'URL macosx 10.6
- 6. authentification HTTP en Python
- 7. Bibliothèques JavaScript Comet prenant en charge plusieurs fenêtres
- 8. Contrôle ASP.NET Treeview prenant en charge le glisser-déposer?
- 9. Structures Java prenant en charge les modèles d'attribut-valeur d'entité
- 10. Outil de test WCF prenant en charge les scénarios Duplex?
- 11. Applications prenant en charge DirectX 9 et 10
- 12. Conteneur IoC/DI prenant en charge Compact Framework
- 13. Serveur C# prenant en charge IPv6 et IPv4 sur le même port
- 14. Serveur proxy HTTP en C#
- 15. diviser un fichier en segments?
- 16. Serveur HTTP Python avec XML-RPC
- 17. Des solutions de création de modèles légères en Java prenant en charge le formatage conditionnel?
- 18. Prise en charge de la bibliothèque Python
- 19. Existe-t-il des frameworks Web MVC prenant en charge plusieurs types de requêtes?
- 20. Prise en charge des connexions HTTP persistantes dans mon serveur proxy
- 21. Déterminer la version HTTP prise en charge par le serveur Web
- 22. Client minimal prenant en charge la sécurité au niveau des messages sur l'interface de canal
- 23. Existe-t-il une nouvelle bibliothèque pour Java prenant en charge IPv6 sous Solaris?
- 24. HTTP PUT est-il pris en charge dans J2ME?
- 25. En utilisant web.py comme serveur http non bloquant
- 26. Effectuer une demande HTTP/HTTP POST simple en ASCII/UTF-8 en Python?
- 27. Moniteur multi-serveur/restarter automatique en python
- 28. Plugin de curseur Jquery prenant en charge les "poignées à plusieurs plages"
- 29. Recherche d'une bibliothèque .NET pour l'authentification prenant en charge plusieurs sources
- 30. Vues arborescentes Javascript prenant en charge le glisser-déposer de plusieurs articles
Merci, je l'ai entendu parler de Twisted, mais ma première impression était qu'il était un poids lourd de peu pour ma tâche. Je vais jeter un second coup d'œil, car il semble que vous pouvez télécharger et lancer simplement twisted.web sans le reste des choses. – slacy
Je comprends votre sentiment ... tordu a une grosse API, semble un peu sectaire et a une certaine courbe d'apprentissage. Cela m'a d'abord découragé, mais parfois je trouve que c'est le bon outil pour le travail :-) –