Есть несколько клиентских программ, которые периодически подключаются к порту на моем сервере и отправляют одну строку текста.
Когда соединение с портом установлено, мне нужно запустить скрипт CLI PHP, который обрабатывает данные. Многие удаленные скрипты могут выполняться / подключаться более или менее в одно и то же время, поэтому я думаю, что было бы лучше, если бы socat разветвлял процесс для каждого подключения для запуска скрипта.
Мне нужно сделать сокат большинство из того, что мне нужно, с помощью команды
socat tcp-l:myport,fork exec:mypath/socatTest.php
Я могу прочитать ввод на php: // stdIn. Все хорошо.
Проблема в том, что процесс не похоже на вилку, поэтому, если вторая внешняя программа отправляет данные, а другая делает то же самое, она получает ошибку отказа в соединении.
Где я ошибся?
Не использую socat
почему бы не использовать PHP для прослушивания этого сокета и обработки вашей информации? Если вы проверите socket_accept, ниже вы увидите несколько примеров прослушивания сокета и разветвления этого процесса для нескольких клиентов. здесь также есть еще один пример - пользовательский веб-прокси-это-лучше-разветвлять-процесс-или-делать-http-запросы
Что касается socat
Во-первых, ни в коем случае не работали с socat. так что это полностью основано на просмотре документации. так что из того, что я могу сказать по документации Вот, казалось бы, exec:<command-line>
должен развиваться независимо от процесса. похоже, что вам не нужно явно указывать это в параметрах.
Адреса EXEC или SYSTEM вызывают программу, использующую дочерний процесс, и передают данные между socat и программой.
ты заставлял это работать раньше?