“Connection: Keep-Alive” dans la réponse du serveur
Je suis en train d'établir un HTTP connexion persistante à partir d'une application Silverlight vers une page PHP (c'est à dire sans la création d'une nouvelle connexion TCP pour chaque requête HTTP) hébergé par un serveur web Apache.
À cette fin, j'ai besoin de serveur web pour envoyer ses réponses HTTP avec la "Connexion" en-tête réglé sur "Keep-alive". Côté Client, il ne semble pas être de tout le réseau API fournie par Silverlight est essentiellement une enveloppe du navigateur réseau capabilies, de ce que j'ai lu : donc, si le navigateur supporte le protocole HTTP 1.1 et Connection: Keep-Alive par défaut pour ses demandes, c'est la fin. Content-Length est également bien défini, de sorte que le serveur ne sait quand
il a pour envoyer la réponse. Cependant, la réponse du serveur pour les requêtes PHP définit systématiquement la Connexion":" "fermer", mettant ainsi fin à la connexion et la prévention d'une connexion persistante.
J'ai essayé quelques choses pour contourner ce problème : les différentes Méthodes (GET et POST), donnant explicitement une "Connection: keep-alive" de la réponse avec le code PHP suivant au début de mon script :
header("Connection: Keep-alive");
Le dernier ajoute l'en-tête attendu de la réponse, ce qui est bon, mais un complément d' "Connection: close" est encore ajouté plus tard dans les en-têtes de réponse.
Est-il une fonction PHP ou Apache qui applique "fermer" (pour certains, la sécurité ou la performance but, je suppose), ou suis-je manqué quelque chose ?
Merci d'avance.
P. S. : En interceptant les paquets, j'ai remarqué que pas de nombreux sites web utilisent des "Keep-alive" et la connexion TCP est rétablie. N'est-ce pas Keepalive la valeur par défaut et préféré comportement sous HTTP 1.1 ?
OriginalL'auteur ZenithM | 2010-06-07
Vous devez vous connecter pour publier un commentaire.
La fonctionnalité Keep-Alive n'est pas fait pour les connexions persistantes.
Keep-Alive est destinée à réduire le nombre de connexions pour un site web. Au lieu de créer une nouvelle connexion pour chaque image/css/javascript dans une page web de nombreuses demandes seront faites ré-utilisant la même connexion.
Il y a certains paramètres qui empêchent cette dans Apache aussi, comme le nombre maximal de demandes de connexion ou des délais d'attente entre les demandes. Cela permettra également de manger vos ressources très rapide parce que chaque connexion a besoin de son propre thread.
Vous devez passer à une autre solution, qui est faite pour ce genre de travail.
Pour les services de garder votre connexion ouverte, vous pouvez prendre un coup d'oeil à http://orbited.org et http://twistedmatrix.com/trac/
oui, c'est aussi une possibilité. à mon avis autour de peut le faire beaucoup plus facilement et est plus stable, tout en fournissant une base http serveur 🙂
Je suis à la programmation en temps réel une application de messagerie instantanée (un peu comme Google Wave pour le temps réel aspect) dans un contexte restreint (PHP seulement et un minimum de fonctionnalités de serveur web). Je ne suis même pas autorisé à utiliser datebases. Dans ce genre de pression sur demande (chaque frappe de touche essentiellement le rendement d'une demande), il serait utile de garder en vie la connexion avec le serveur. Merci pour vos conseils.
+1 pour une bien meilleure réponse que ZZ Codeur. Keep-Alives ont très peu à voir avec la tâche décrite dans le commentaire ci-dessus par zenithm - il y a plusieurs approches, la COMÈTE vient à l'esprit, bien que l'ajax d'interrogation est une meilleure option pour un système évolutif.
Cette réponse est certainement le plus élaboré, mais je pense que mon problème était juste de la configuration d'Apache. Encore, merci pour le tuyau pour moi la Comète solution. Je vais regarder dans.
OriginalL'auteur favo
Depuis PHP ne gère pas la connexion HTTP, il n'a aucun moyen de modifier ce paramètre. Vous devez définir que dans les serveurs. Par exemple, vous pouvez activer l'option " keep-alive comme cela dans Apache si vous utilisez mod_php,
OriginalL'auteur ZZ Coder