Состояние предшествующих подключений при использовании файлового дескриптора?

StackOverflow https://stackoverflow.com/questions/3536155

Вопрос

Я играю с веб-сервером, используя разъем UNIX и SendMSG / RECVMSG, чтобы пройти дескриптор файла сокета в новый процесс сервера, не теряя любые запросы. При тестировании его AB я обнаружил, что клиентские соединения будут задерживаться, а Apachebench (AB) покажет ошибку: «APR_Poll: Указанный тайм-аут истек (70007)».

Я подозревал, что произошло изменение адреса файлового дескриптора, который бы представлял открытые соединения бесполезными, однако убедившись, что соединения были закрыты в конце каждого запроса, не сделали разницу, пара запросов не удастся.

Есть ли дополнительная странность на уровне сокета или AB просто странно? Есть ли что-нибудь еще, что я должен учитывать?

Редактировать: Использование PHP в качестве клиента, чтобы сделать запросы, также забиты в течение цикла.

Это было полезно?

Решение

Это эквивалентно пытаться отправить телефон по телефонной линии. Это не имеет никакого смысла. Разъем FD идентифицирует конечную точку соединения. Если другой хост хочет, чтобы соединение, это придется ума его. Вы не можете дать ему один из ваших.

Другие советы

Он имеет смысл, если у вас есть главный сервер, который слушает сокет (принимая входящие соединения), и у вас есть несколько рабочие процессы.

Вы можете выбрать подходящий / свободный работник (например, на основе количества соединений TCP, каждый работник использует) и передает дескриптор входящего соединения от мастера к работнику. Это помогает избежать «Thundering Strd», когда несколько работников слушают общую конечную точку.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top