Сокеты PHP: отправка успешна, но невозможно получить ответ
Я реализую веб-службу, которая отправляет сообщения HL7 через протокол MLLP нескольким поставщикам услуг. На практике это должно быть так же просто, как отправка действительной строки, окруженной
<VT>
а также
<FS><CR>
. Итак, что-то вроде (это псевдокод):
$socket = create_socket($destIp, $destPort);
$socket->send("\013".$hl7Message."\034\015");
$response = $socket->read();
Я использовал для этого эту библиотеку ( в частности, код отправки находится в этом файле ), которая использует
socket_create()
,
socket_write()
а также . Он работает отлично, за исключением одного поставщика услуг, у которого истекает время ожидания данных. Используя tcpdump, я вижу, что данные успешно отправлены, пакет с ответом получен, но PHP не может получить данные ответа через
socket_read()
.
Чтобы быть уверенным, я попытался переопределить его с помощью потоковых сокетов, поэтому я использовал функции
stream_socket_client()
,
stream_socket_sendto()
а также
stream_socket_recvfrom()
на в остальном в основном идентичной функции. Результат почти такой же.
Mirth , Java-платформа для обработки сообщений HL7, не имеет проблем с отправкой этому провайдеру. У меня тоже нет проблем с отправкой сообщений Мирту. Единственная проблема заключается в том, что я получаю их ответы при отправке напрямую.
Учитывая, что это транснациональная компания, а я - программист-фрилансер, я хотел бы знать, что еще я могу сделать, чтобы выяснить, в чем проблема, и, если возможно, как ее решить. Любые намеки на то, как отладить это, или альтернативные способы реализации этого (не полагаясь на посредников - я знаю, что могу отправить сообщения в Mirth, и он отправит их поставщику услуг, но это дополнительная точка отказа, я бы хотел чтобы избежать) были бы весьма признательны.