[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Циклы, потоки?
OleKh
Никак не получается определиться с ответом на тестовое задание.

Вопрос в том, что должно быть вместо /* ????????? */ чтобы код выполнился правильно?
В интернете нашел ответ unset($write_map[$index]); и пояснение, что эта задача на исправление логики скрипта. Т.е. остальное просто чтобы запутать?

Но мне не понятно другое все таки - $data['buf']. Это опечатка вместо, $data['data'], или где берется этот элемент массива? И вообще насколько данный скрипт пригоден для использования?




function get_socket($host, $port) {

// открывется соединение с интернет сокетом
$fr = fsockopen($host, $port);

// поток переключен в неблокирующий режим
stream_set_blocking($fr, false);

return $fr;
}

// формируется массив (сокет и данные) для 3-х потоков
$write_map[] = array('fr' => get_socket($host1, $port1), 'data' => str_pad("", 500000, "A"));
$write_map[] = array('fr' => get_socket($host2, $port2), 'data' => str_pad("", 500000, "B"));
$write_map[] = array('fr' => get_socket($host3, $port3), 'data' => str_pad("", 500000, "C"));

do {

// формируется массив сокетов
$write_sockets = array();
foreach ($write_map as $data) {
$write_sockets[] = $data['fr'];
}

//Потоки, перечисленные в массиве $write_sockets, будут отслеживаться на предмет того,
//что запись в них не будет блокироваться.

$num_returned = stream_select($r = null, $write_sockets, $e = null, 30);

//если что-то изменилось в массиве $write_sockets возвращается кол-во измененных потоков
if ($num_returned) {
foreach ($write_sockets as $fr) {
foreach ($write_map as $index => $data) {
if ($data['fr'] === $fr) {
$len = fwrite($fr, $data['buf']);// откуда возьмется $data['buf'] ?

//для чего последующие действия?

if ($len) {
$data['buf'] = substr($data['buf'], $len);
if (empty($data['buf'])) {
fclose($data['fr']);
/* ????????? */
}
}
}
}
}
}
}
while (count($write_map));
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.