Мне нужно, чтобы мое PHP-приложение (автономное, а не веб-) подключалось к серверу, а также размещало tcp-сокет для того, чтобы к нему подключались ... но поскольку php не является многопоточным, я не могу Пусть сервер прослушивает один сокет и одновременно размещает другой! все это должно быть в одном файле. Можно ли запустить оба этих рядом?
В качестве альтернативы ответу konforce, используйте socket_select(), чтобы прослушать оба сокета одновременно. Он сообщит вам, какие сокеты могут быть прочитаны / записаны, когда вернется. Как правильно указали pdb и konforce, вам нужно перевести сокет в неблокирующий режим с помощью socket_set_nonblock(). Как только socket_select() сообщит вам, что сокет готов, напишите или прочитайте как можно больше данных для каждого готового сокета, затем снова вызовите socket_select().
socket_select()
socket_set_nonblock()
Вам понадобятся оба, socket_select И неблокирующие сокеты.
Например, socket_select сообщает, что сокет доступен для записи, но не сообщает, сколько байтов вы можете отправить без блокировки.
Используйте неблокирующие розетки.См. socket_set_nonblock() и соответствующие функции.