|
Модераторы: Aliance, skyboy, MoLeX, ksnk |
|
lollollollol |
|
||||
Опытный Профиль Группа: Участник Сообщений: 287 Регистрация: 12.3.2013 Репутация: нет Всего: нет |
Здравствуйте, пожалуйста, помогите понять как работает функция socket_select?
Я понял так: в переменную $read помещаем массив ресурсов, созданных и подготовленных сокетов
После того как функция socket_select будет выполнена, переменная $num_changed будет содержать количество изменённых сокетов. А вот дальше слошные вопросы, ответы на которые я не смог найти, начну по порядку: 1. Как работает таймаут? Функция ждёт указанное время, а потом отдаёт результат, или это максимальное время которое ожидает функция изменений в сокете, в случае если изменений нет - вернёт false? 2. Как работают переменные $read, $write, $except, с $read понятно, а вот с $write нет - как функция понимает на какой сокет данные хотят придти, а где ожидают данных? Или может быть в обе переменные нужно отдавать одинаковые массив, и в котором массиве будет наш сокет, те действия и следует выполнять? 3. При открытии сокета на 2 портах и более, при получении информации что нужно читать сокет ($read) я вызываю socket_accept, если есть значения в переменной $write, тоже нужно его вызывать, или там могут быть значения исключительно уже вызваные socket_accept'ом? 4. Когда на один порт поступает несколько подключений, вызывается множество socket_accept, все они записываются в массив $read, как потом отличить, нужно ли вызывать accept для чтения из них? 5. А как понять на какой порт пришли данные, если допустим у нас по 20 активных подключений с 3-х сокетов? У меня в голове какая-то каша, возможно я не корректно сформулировал вопрос, прошу внести хоть какую-то ясность в вопросы, заранее спасибо всем кто откликнется! Это сообщение отредактировал(а) lollollollol - 29.3.2014, 21:03 |
||||
|
|||||
lollollollol |
|
|||
Опытный Профиль Группа: Участник Сообщений: 287 Регистрация: 12.3.2013 Репутация: нет Всего: нет |
Ау, программисты, пожалуйста:)
|
|||
|
||||
lollollollol |
|
|||
Опытный Профиль Группа: Участник Сообщений: 287 Регистрация: 12.3.2013 Репутация: нет Всего: нет |
ап
|
|||
|
||||
lollollollol |
|
|||
Опытный Профиль Группа: Участник Сообщений: 287 Регистрация: 12.3.2013 Репутация: нет Всего: нет |
ап
|
|||
|
||||
numerovan |
|
|||
Опытный Профиль Группа: Участник Сообщений: 549 Регистрация: 1.12.2007 Репутация: 2 Всего: 2 |
Сижу разбираюсь с этими сокетами, что я сам понял за эти сутки танцев с бубном: socket_select() - функция следит за изменениями в массиве read в частности, т.е. к примеру подключилось 20 челов, сидят они и ни чего не делаю, потом один из них решил что-то написать, послал запрос ... теперь из 20 значений в массиве read получается только 1 значение ... я вроде пока так это понял, хотя только что проверил это. По поводу таймаута socket_select($streams, $write = NULL, $except = NULL, SLEEP_TIME_SECONDS, SLEEP_TIME_MILLISECONDS) ... в общем если в SLEEP_TIME_SECONDS поставить допустим 5, то отдача данных от ф-ии socket_select() будет раз в 5 секунд, следующий параметр как видим с учетом миллисекунд. По поводу $read, $write, $except ... сам хз, но как-то нужно это понять: Сокеты массива read будут ожидаться, чтобы просмотреть, становятся ли символы доступными для чтения (точнее, чтобы просмотреть, не будет ли блокировано чтение; ресурс сокета готов также и в end-of-file, и в этом случае socket_read() возвратит строку нулевой длины). Сокеты из массива write будут ожидаться, чтобы просмотреть, не будет блокировано ли чтение. Сокеты из массива except ожидаются для исключений. |
|||
|
||||
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | PHP: Сеть | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |