Je suis en train d'expérimenter à l'aide de fastcgi sur nginx, mais j'ai rencontré quelques problèmes. Nginx ne pas réutiliser les connexions, il donne 0 dans BeginRequest drapeaux, de sorte que l'application doit fermer la connexion après que la demande a fini.
J'ai le code suivant pour la fermeture:
socket.shutdown(SocketShutdown.BOTH);
socket.close();
Le problème est que les connexions ne sont pas réellement fermé.. Ils s'attardent comme TIME_WAIT, et nginx (ou quelque chose) wont pas continuer à ouvrir de nouvelles connexions. Ma conjecture est que je suis en train de faire quelque chose de mal lors de la fermeture de la sockets, mais je ne sais pas quoi.. Sur une note connexe - comment puis-je obtenir nginx pour garder les connexions ouvertes?
C'est à l'aide de nginx 1.0.6 et D 2.055
EDIT: N'ai pas eu tout de plus près, mais j'ai aussi vérifié le linger option, et c'est:
linger l;
socket.getOption(SocketOptionLevel.SOCKET, SocketOption.LINGER, l);
assert(l.on == 0); // off
getOption
renvoie 4 si.. Aucune idée de ce que cela signifie. La valeur de retour est sans-papiers.
EDIT: J'ai aussi essayé d'utiliser TCP_NODELAY sur le dernier message envoyé, mais cela n'avait pas du tout l'effet:
socket.setOption(SocketOptionLevel.SOCKET, SocketOption.TCP_NODELAY, 1);
EDIT: nginx 1.1.4 membres garder en vie les connexions. Cela ne fonctionne pas comme prévu mais.. Est correctement rapport que le serveur est responsable de la connexion de gestion de durée de vie, mais encore, elle crée un nouveau socket pour chaque demande.