1

Je travaille sur une application Web php qui implique des appels à des services Web tiers. Récemment, j'ai rencontré des problèmes parce que certains services Web sont lents et/ou expirent. (Lorsque cela se produit, le service renvoie une erreur après 5-6 minutes, qui est traitée par l'application Web)Un script de serveur lent fait décrocher IE

Cependant, le problème survient qu'en attendant le résultat/timeout, toutes les autres connexions à l'application Web dans le navigateur (autres fenêtres/onglets dans IE) décrochage. Cela semble être un problème avec le navigateur, car si vous ouvrez une fenêtre secondaire dans un autre navigateur (par exemple, Chrome), l'application Web diffuse des pages sans délai. J'ai envisagé de configurer l'appel de service Web de façon asynchrone (un processus server.side séparé, ou un appel ajax dans le navigateur), mais en attendant, je voudrais savoir pourquoi IE met toutes les connexions à l'application Web en attente en attendant une page? Se pourrait-il qu'un en-tête personnalisé ou une autre astuce de marquage triviale dise à IE de continuer avec des connexions à d'autres pages sur le même hôte?

Répondre

1

le problème qui se pose en attendant le résultat/délai d'attente, toutes les autres connexions à l'application Web dans le navigateur

Qu'est-ce que vous voyez est un comportement normal et attendu, si vous êtes en utilisant les sessions. Le gestionnaire de session basé sur un fichier par défaut place un verrou sur le fichier de session lorsque le propriétaire de la session fait une demande. Une fois la requête terminée, le verrou est libéré. En attendant, si l'utilisateur fait d'autres demandes, ces demandes attendront que le verrou soit libéré avant de pouvoir continuer. Ce comportement empêche une condition de concurrence qui pourrait entraîner la perte de données de session. Si vous n'utilisez pas de sessions, ou si vous avez écrit votre propre gestionnaire de session et qu'il ne fait pas de verrouillage (la plupart ne le font pas, vous devez coder ce comportement vous-même), alors oui, IE est bizarre et je n'a pas d'autres suggestions.

J'ai envisagé la mise en place de l'appel de service Web de manière asynchrone

Si le service Web est peu fiable, c'est une bonne idée. Vous devriez considérer Gearman, un système de file d'attente de travail/message. Il a comprehensive PHP support en tant que PECL extension.

+0

Même pour les personnes n'utilisant pas les sessions, ils doivent vérifier session.auto_start est défini sur 0 dans php.ini, car ils peuvent utiliser des sessions sans en être conscient. –

+0

Merci beaucoup pour l'info! J'utilise des sessions, et il ne m'est jamais venu à l'esprit que le verrouillage a eu lieu sur le serveur, comme 1) toutes les autres opérations s'exécutent si rapidement 2) La plupart des opérations sont à une seule page – goorj

Questions connexes