Пакеты KeepAlive через запрос Soap - PullRequest
1 голос
/ 08 января 2010

Я отлаживал некоторые запросы Soap, которые мы делаем между двумя серверами в одной VLAN. Приложение на одном сервере написано на PHP, приложение на другом написано на Java. Я могу контролировать и вносить изменения в код PHP, но не могу влиять на сервер Java. Приложение PHP формирует XML с использованием объектов DOMDocument, а затем отправляет запрос с использованием расширения cURL.

Когда запрос на мыло длится более 5 минут, он всегда будет ждать, пока не истечет максимальное время ожидания, и завершится с сообщением, подобным этому:

Тайм-аут операции после 900000 миллисекунд с получением 0 байтов

После перехвата отправляемых пакетов выясняется, что проблема была вызвана 5-минутным таймаутом в сети, которая закрывала то, что считалось устаревшим соединением. Было два способа исправить это: увеличить время ожидания в iptables или начать отправку пакетов KeepAlive по запросу.

Если быть точным, я хотел бы реализовать оба решения. Сократить время ожидания было легко для ops, но отправка пакетов KeepAlive оказывается сложной. Сама библиотека cURL поддерживает это (см. Флаг - keepalive-time для приложения CLI), но не похоже, что это было реализовано в PHP cURL library . Я даже проверил источник, чтобы убедиться, что это не недокументированная функция.

Итак, мой вопрос таков: Как, черт возьми, я могу отправлять эти пакеты? Я вижу несколько четких вариантов, но мне не нравится ни один из них:

  • Напишите оболочку, которая будет запускать запрос с помощью shell_exec в приложении CLI. Это хак, который мне просто не нравится
  • Обновите расширение cURL для поддержки этого. Это не вариант согласно Ops.
  • Открой розетку сам. Я знаю достаточно, чтобы быть опасным. Я также не видел способа сделать это с помощью fsockopen, но я мог что-то упустить.
  • Переключиться на другую библиотеку. Что существует, что поддерживает это?

Спасибо за любую помощь, которую вы можете предложить.

...