Я написал класс PHP для клиента websocket, который позволяет вам подключаться к серверам websocket с PHP. Он работает очень хорошо, за исключением того, что он может читать только данные в бесконечном цикле. В соединении с websocket сервер или клиент могут отправлять данные всякий раз, когда захотят, столько раз, сколько захотят. К сожалению, socket_select
, socket_read
и socket_recv
не будет блокировать, если любые данные были отправлены в другой сокет - socket_select
будет немедленно вернуться, и socket_read
и socket_recv
возвращает пустую строку. Я попытался сделать процесс сна до тех пор, пока он не получил SIGPOLL
, но это заставило его спать бесконечно. Есть ли способ узнать, что больше данных доступно в сокете после того, как данные уже получены?PHP socket_read возвращает пустую строку
0
A
ответ
0
PHP не является хорошим языком для этого, поскольку он не является асинхронным языком. Я бы предложил Node.js или что-то подобное.
Возможно, я мало знаю о PHP и веб-сайтах, но не могли бы вы просто зациклировать его, пока не нажмете SIGPOLL
?
+0
Ожидание 'SIGPOLL' не сработало для меня, хотя я не уверен, что правильно его настроил - я использовал' pcntl_sigwaitinfo (array (SIGPOLL)); ', но мне нужно сначала заблокировать' SIGPOLL'? – Monchoman45
Смежные вопросы
- 1. PHP mysql_real_escape_string возвращает пустую строку
- 2. PHP readInnerXML возвращает пустую строку
- 3. PHP возвращает пустую строку json?
- 4. Listbox возвращает пустую строку? PHP
- 5. php curl возвращает пустую строку
- 6. PHP - filesize() возвращает пустую строку
- 7. PHP Realpath() возвращает пустую строку
- 8. PHP fgets возвращает пустую строку
- 9. PHP: array_pop возвращает пустую строку
- 10. Socket_read возвращает '1' ..?
- 11. finfo_file возвращает пустую строку
- 12. file_get_contents возвращает пустую строку
- 13. json_decode возвращает пустую строку
- 14. date() возвращает пустую строку
- 15. RealPath возвращает пустую строку
- 16. Mustache.to_html() возвращает пустую строку
- 17. mysqli_real_escape_string() возвращает пустую строку
- 18. getFormAction() возвращает пустую строку,
- 19. file_get_contents() возвращает пустую строку
- 20. cURL возвращает пустую строку
- 21. md5 возвращает пустую строку
- 22. Curl возвращает пустую строку
- 23. PHP array_search не работает (возвращает пустую строку)
- 24. file_get_contents ('php: // input') всегда возвращает пустую строку
- 25. JsonEncode возвращает пустую строку в php
- 26. file_get_contents («PHP: // ввод» возвращает пустую строку
- 27. intval() в php возвращает пустую строку?
- 28. PHP json_decode возвращает пустую строку (не NULL)
- 29. Ошибка PHP 500 & Post возвращает пустую строку
- 30. Параметр FILEINFO_MIME PHP возвращает пустую строку
Не прямой ответ, но похоже, что вам следует рассмотреть подход, основанный на событиях (ну, на самом деле, это не произошло, если вы не внедрили его таким образом), например http://php.net/socket_select – Corbin
@Corbin:
socket_select
немедленно возвращается если какие-либо данные находятся в сокете, независимо от того, читаете ли вы ее или нет. Документы разъясняют это как «проверку, если чтение не блокируется», и поскольку обаsocket_read
иsocket_recv
не будут блокировать (они возвращают пустые строки), он немедленно возвращается. – Monchoman45