38 votes

Le serveur Twisted se bloque de manière inattendue lors de l'exécution de django

J'exécute une application django sur twisted en utilisant les scripts django-on-twisted à partir de ce site .

Toutes les demandes sont traitées par un serveur nginx qui renvoie les demandes pertinentes à twisted. J'ai une configuration d'url pour une API, qui ne fait que recevoir des requêtes get et effectue un traitement sur les paramètres get avant d'envoyer une réponse. Cependant, quand un client spécifique frappe l'API, le serveur twisted s'arrête tout simplement. Le journal de Nginx est collé ci-dessous :

the.ip.of.client - - [21/Apr/2012:11:30:36 -0400] "GET /api/url/?get=params&more=params HTTP/1.1" 499 0 "-" "Java/1.6.0_24"

Les journaux de twisted ne montrent rien mais twisted cesse de fonctionner à ce stade. D'après le code d'erreur 499, je suppose que le client a fermé la connexion de manière inattendue, ce qui ne me pose aucun problème. Que le client reçoive la réponse ou non n'est pas important pour moi. Voici la vue django concernée :

def api_url(request):
    if request.GET:
        get_param = request.GET.get('get', [''])[0]
        more_param = request.GET.get('more', [''])[0]
        #some processing here based on the get params
        return HttpResponse('OK')
    else:
        raise Http404

La demande du client est une demande valide et n'affecte pas le traitement de manière négative. Je l'ai testée à partir du shell. Lorsque je l'ai essayé sur le serveur de développement de django, il s'est écrasé de la même manière sans laisser aucune trace de la réception de la requête. Tout fonctionne parfaitement bien lorsque je le teste depuis le navigateur. De même, le serveur twisted fonctionne bien pour tous les cas d'utilisation habituels. C'est la première fois que je rencontre un problème avec lui. Toute aide ou indication sera appréciée.

1voto

Turnaev Evgeny Points 474

Il n'y a pas de code http 499 dans le rfc. Nginx définit lui-même le code 499.

Lorsqu'un client envoie une requête, et ferme la connexion sans attendre la réponse, un code 499 se produit. la réponse, un code 499 apparaît. S'il y a beaucoup de 499s dans votre journal d'accès, cela est principalement dû à la lenteur des back-ends (trop lente pour que vos utilisateurs attendent). Vous devrez peut-être optimiser les performances de votre site Web.

http://forum.nginx.org/read.php?2,213789,213794#msg-213794

1voto

dnozay Points 3672
  • vous dites que le problème vient d'un client qui frappe une url particulière (reproductible ?)
  • puisque cela fonctionne pour vous avec gunicorn mais pas avec django-on-twisted, soit le script ne fonctionne pas correctement soit twisted.web2 est le problème.

veuillez essayer $ sh init.sh yourdjangoproject stand .

vous pouvez également essayer de modifier run.py pour attraper SystemExit :

import pdb
try:
   # __main__ stuff here.
except (KeyboardInterrupt, SystemExit):
   pdb.set_trace()

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X