Мой PHP-скрипт читает из моей БД и отправляет сообщения в очередь, чтобы рабочие роли (а также другие машины LAMP) могли получать их и работать параллельно.
Однако, часто мой сценарий заканчивается фатальной ошибкой со следующим сообщением в моем error_log на моем сервере apache. Эта ошибка на отправляющей стороне.
PHP Notice: fwrite(): send of 414 bytes failed with errno=32
Broken pipe in /home/azureuser/pear/share/pear/HTTP/Request2/SocketWrapper.php on line 202
PHP Fatal error: Uncaught HTTP_Request2_MessageException:
Error writing request in /home/azureuser/pear/share/pear/HTTP/Request2/Adapter/Socket.php
on line 130
Exception trace
HTTP_Request2_SocketWrapper->write('POST /proxy/mess…')
/home/azureuser/pear/share/pear/HTTP/Request2/Adapter/Socket.php:130
HTTP_Request2_Adapter_Socket->sendRequest(Object(HTTP_Request2))
/home/azureuser/pear/share/pear/HTTP/Request2.php:93
in /home/azureuser/pear/share/pear/HTTP/Request2/SocketWrapper.php on line 206
Мне кажется, что сокет по какой-то причине создает исключение, которое не обрабатывается, и, таким образом, приводит к аварийному завершению сценария. Если вы согласны, вы предлагаете исправить SDK?
Посмотрел это очень быстро для первого прохода, но кажется:
fwrite(): send of 414 bytes failed with errno=32
Относится к удаленному сокету, что может произойти по нескольким причинам:
Удалось ли вам просмотреть журналы FREB или запустить отчет о процессе PHP на портале поддержки (https: // [сайт-имя] .scm.azurewebsites.net / Поддержка) чтобы диагностировать, почему сокет сбрасывается?
Вы пытались увеличить значение времени ожидания конечной точки, к которому подключается ваш php-сокет. Время ожидания по умолчанию составляет 4 минуты для конечной точки виртуальной машины. Вы можете изменить это на более высокое значение. Вот статья о том, как это сделать. https://azure.microsoft.com/blog/2014/08/14/new-configurable-idle-timeout-for-azure-load-balancer/
Проверьте этот раздел: «Задать время простоя при создании конечной точки Azure на виртуальной машине» по ссылке выше.