Je développe une application web avec Spring et Tomcat 6. Parfois, pour une raison ou une autre, une requête prend trop de temps à se terminer et cela réduit les performances du serveur. Est-il possible de limiter le temps d'exécution des requêtes dans Tomcat 6 ou Spring ? D'autres approches sur ce problème sont les bienvenues. Merci.
Réponses
Trop de publicités?Est-il possible de limiter le temps d'exécution des requêtes dans Tomcat 6 ou Spring ?
Oui, c'est possible, mais vous devrez l'implémenter vous-même.
L'idée de base est que la méthode de demande doit utiliser un fichier Timer
pour programmer une interruption pour lui-même pour N secondes dans le futur. Ensuite, il doit vérifier périodiquement pendant le traitement de la demande pour voir s'il a été interrompu. Enfin, il doit annuler la minuterie si elle se termine avant le délai d'attente.
Ce qui précède suppose que c'est la servlet qui doit limiter le temps qu'elle passe à traiter une requête. Si vous souhaitez plutôt implémenter le délai d'attente du côté client, il est facile de mettre en place un délai d'attente à l'achèvement d'une requête ; par exemple voir Délai de requête Tomcat .
(Mais le problème avec un délai d'attente côté client est que le serveur ne saura pas que le client a renoncé à attendre, et continuera à traiter la demande malgré tout. Il est facile d'avoir de gros problèmes avec cela. Imaginez une requête qui prend beaucoup plus de temps que le délai d'attente, combinée à un client qui relance de façon répétée les requêtes dont le délai d'attente est dépassé...)
La déclaration ci-dessus de Sthepen n'est pas correcte. Du côté client, lorsqu'il abandonne ou que le navigateur est fermé, le navigateur ne maintient évidemment pas son socket en vie. Il effectue un shutdown de la socket (récupérer la mémoire et le port, n'est-ce pas ?). La procédure d'arrêt enverra les signaux d'arrêt au socket côté serveur - RST je crois.