Я экспериментирую с использованием fastcgi на nginx, но столкнулся с некоторыми проблемами.Nginx не использует соединения повторно, он дает 0 в флагах BeginRequest, поэтому приложение должно закрыть соединение после завершения запроса.
У меня есть следующий код для закрытия:
socket.shutdown(SocketShutdown.BOTH);
socket.close();
Проблема в том, что соединения на самом деле не закрыты. Они сохраняются как TIME_WAIT, и nginx (или что-то еще) не будет продолжать открывать новые соединения.Я предполагаю, что я делаю что-то не так при закрытии сокетов, но я не знаю, что .. В соответствующей заметке - как я могу получить nginx, чтобы держать соединения открытыми?
Это использует nginx 1.0.6 и D 2.055
РЕДАКТИРОВАТЬ: Не подобрался ближе, но я также проверил опцию задержки, и она выключена:
linger l;
socket.getOption(SocketOptionLevel.SOCKET, SocketOption.LINGER, l);
assert(l.on == 0); // off
getOption
возвращает 4, хотя .. Не знаючто это значит.Возвращаемое значение недокументировано.
РЕДАКТИРОВАТЬ: я также пытался использовать TCP_NODELAY для последнего отправленного сообщения, но это также не оказало никакого влияния:
socket.setOption(SocketOptionLevel.SOCKET, SocketOption.TCP_NODELAY, 1);
РЕДАКТИРОВАТЬ: nginx 1.1.4 поддерживает живые соединения.Это работает не так, как ожидалось. Правильно сообщать, что сервер отвечает за управление временем жизни соединения, но все равно создает новый сокет для каждого запроса.