2009-04-16 7 views
0

Je suis en train d'implémenter un serveur proxy de mise en cache HTTP en C++. J'en ai terminé avec la plupart, mais je suis bloqué à un point.
Ce que je fais est de créer chaque thread avec un socket à gérer chaque fois qu'une demande du navigateur vient. J'analyse la requête, je vérifie sa disponibilité dans le cache et si je ne la trouve pas, je la transfère à la fin du serveur www. Dans les deux cas, j'écris la réponse reçue sur le socket connecté. Maintenant le problème est jusqu'à ce que et à moins que je ferme la prise, le navigateur ne suppose pas que le transfert soit complet et attend indéfiniment.
De cette façon je ne peux pas utiliser une socket pour plus d'une connexion, en d'autres termes je ne peux pas supporter les connexions persistantes.
Toute aide sera appréciée ..Prise en charge des connexions HTTP persistantes dans mon serveur proxy

Merci,

Répondre

2

Que les en-têtes vous envoyez au client?

Vous devriez inclurons:

l'en-tête Content-Length
Content-Length: ... 
Keep-Alive: timeout=..., max=... 
Connection: Keep-Alive 

En particulier, il est essentiel de connexions persistantes afin que le client sait lire beaucoup de données. Voir section 8.1.2.1 of RFC 2616.

Alternativement, si vous voulez dire au client de rompre la connexion, envoyer:

Connection: close 
0

Maintenant, le problème est jusqu'à ce que et à moins que je ferme la prise, le navigateur ne prend pas le transfert être complet et attendre indéfiniment.

Droite. HTTP 1.1 utilise Keep-Alive par défaut. De cette façon, je ne peux pas utiliser un socket pour plus d'une connexion, en d'autres termes, je ne peux pas prendre en charge les connexions persistantes de Je ne suis pas sûr de vous avoir compris, car cette connexion permanente est une connexion persistante.