сокеты — PHP socket_read () возвращает только 1 строку

Я использую приведенный ниже скрипт для подключения к внешнему АТС-серверу и получения журналов вызовов.

Однако он возвращает только 1 строчку за раз, что равно 1 log. Поэтому мне нужно обновить несколько раз, чтобы получить все доступные журналы.

$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP) or die();
$result = socket_connect($socket, $address, $port) or die();

$out = socket_read($socket, 2048);

Как получить все доступные строки без необходимости постоянно инициализировать соединение?

1

Решение

Возможно, вы имеете в виду чтение из сокета в цикле?
Согласно документации (http://php.net/socket_read) вы можете сделать что-то подобное while ($portion = socket_read($socket, 2048)) { do_something_with_that_portion_of_log; } и если данные исчерпаны, вы получите пустую строку или FALSE, если произошла ошибка.

ОКОНЧАТЕЛЬНОЕ РЕШЕНИЕ

Мы используем socket_set_option($socket, SOL_SOCKET, SO_RCVTIMEO, array('sec'=> 10, 'usec'=> 0)); с режимом неблокирования по умолчанию. После того, как все журналы будут прочитаны, программа будет ждать ~ 10 секунд и заканчивать.

https://gist.github.com/mihalicyn/533273e0d8b23de33aaf7f2cf0973d88

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]