- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
В 2023 году 36,9% всех DDoS-атак пришлось на сферу финансов
А 24,9% – на сегмент электронной коммерции
Оксана Мамчуева
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Можно попросить пояснить? Почему не решается? В терминах РНР вроде как решается (за исключением самого начала, да и то, я не уверен, что это не мой косяк).
Потому что пхп использует системные вызовы для установки сокетов. И там ровно такой же механизм.
У нее есть какие-нить принципиальные отличия от socket_set_blocking? За исключением того, что они из разных семейств.
Да, есть - это её полная противоположность ☝
socket_set_blocking это псевдоним для функции socket_set_block - которая устанавливает блокировку сокетов, а socket_set_nonblock - запрещает их блокировку. Но работоспособность все равно зависит от системы.
neolord добавил 21.02.2009 в 20:04
Я, вроде, описал подробно. Допускаю, что криво. Можете уточняющие вопросы задать?
уточняющий вопрос - что вы хотите получить? Какая цель запрета блокировки сокетов?
Потому что пхп использует системные вызовы для установки сокетов. И там ровно такой же механизм.
Разверните, плз, если не сложно. Такой же механизм, как и где?
Я про термины РНР говорил - есть способы установить сокет в неблокирующее состояние. Способы работают. Так почему не решается-то (в терминах РНР)?
Да, есть - это её полная противоположность
Давайте без издевательств (понятно же, что в виду имелось) :)
Это полнофункциональные псевдонимы? Или есть недокументированные особенности?
уточняющий вопрос - что вы хотите получить? Какая цель запрета блокировки сокетов?
Цель - не ждать, а продолжать выполнение скрипта. Это более-менее стандартная цель использования неблокирующих сокетов, не находите? :)
Цель - не ждать, а продолжать выполнение скрипта. Это более-менее стандартная цель использования неблокирующих сокетов, не находите?
нет. цель - получение результата. если так дальше пойдет, вас начнут подозревать в сканировании портов, например.
так какой результат работы скрипта? вы могли просмотреть ряд очевидных технических схем.
цель - получение результата.
Вы считаете, это корректный ответ на вопрос уважаемого neolord-а? Я так не считаю, поэтому ответил максимально конкретно.
если так дальше пойдет, вас начнут подозревать в сканировании портов, например.
Хорошо еще, что не в совращении малолетних или попытке завладения табельным оружием :)
А почему уклон подозрений в "криминал"? Неблокирующие сокеты только в неблаговидных целях используют? Или это "презумпция виновности" в действии? :)
так какой результат работы скрипта? вы могли просмотреть ряд очевидных технических схем.
А как это может помочь в решении моей конкретной проблемы с fsockopen? Альтернативные технические схемы мне известны (часть из них даже реализована). Я прекрасно понимаю, что мне с радостью укажут на эти альтернативные схемы и решения, заполнив тему оффтопом. Но это не решит мою проблему - перевод fsockopen (или аналога) в неблокирующий режим.
Разверните, плз, если не сложно. Такой же механизм, как и где?
Я про термины РНР говорил - есть способы установить сокет в неблокирующее состояние. Способы работают. Так почему не решается-то (в терминах РНР)?
Механизм тот же что и в ОС под которой запущен пхп. Раз есть способы, в чем ваш вопрос?
Это полнофункциональные псевдонимы? Или есть недокументированные особенности?
Ровно одно и то же.
нет. цель - получение результата
Вот! И я о том же =) Но ТС упорно продолжает философствовать.
Цель - не ждать, а продолжать выполнение скрипта. Это более-менее стандартная цель использования неблокирующих сокетов, не находите?
Т.е. вы хотите добиться возможности поддерживать сокет вне потока выполнения скрипта? Продолжать выполнять далее написанные команды? Т.е. вы хотите синхронизацию сокетов отключить? :) Или распаралеллить процесс? Или создать перманентный сокет?
neolord добавил 21.02.2009 в 21:03
перевод fsockopen (или аналога) в неблокирующий режим.
В документации на пхп утверждается для этого есть единственная команда - socket_set_nonblock. И очень сомнительно что вы получите имено то что ожидаете (продолжение работы скрипта при получении данных из сокета). Вопрос закрыт. Поставьте другой вопрос если хотите услышать что-то конструктивное.
Механизм тот же что и в ОС под которой запущен пхп. Раз есть способы, в чем ваш вопрос?
Вопрос родился из Вашего утверждения о неразрешимости задачи "сделать неблокирующиеся сокеты" на основе функций пхп. Мне было интересно, что Вы имели в виду.
Ровно одно и то же.
Ок, спасибо.
Но ТС упорно продолжает философствовать.
Я ответил на Ваш конкретный вопрос в контексте моих проблем с fsockopen
Т.е. вы хотите добиться возможности поддерживать сокет вне потока выполнения скрипта? Продолжать выполнять далее написанные команды? Т.е. вы хотите синхронизацию сокетов отключить? Или распаралеллить процесс? Или создать перманентный сокет?
Я хочу сделать ровно то же самое, что описано в документе, ссылку на который я приводил в первом посте. У меня ровно такая же проблема - медленное установление первоначального соединения вплоть до истечения тайм-аута в fsockopen. Проблема решится, если перед вызовом функции fsockopen (или аналогичной) эту функцию получится перевести в неблокирующий режим.
В документации на пхп утверждается для этого есть единственная команда - socket_set_nonblock.
Я в курсе того, что утверждается в документации.
И очень сомнительно что вы получите имено то что ожидаете (продолжение работы скрипта при получении данных из сокета).Вопрос закрыт. Поставьте другой вопрос если хотите услышать что-то конструктивное.
Пока Вам сомнительно, я успешно получаю то, что ожидаю (продолжение работы скрипта при получении данных из сокета). Уже открытый и переведенный в неблокирующий режим сокет отлично обрабатывается скриптом. Как раз в этом я проблемы не вижу (и неоднократно выше об этом писал) т.к. все давно реализовано и замечательно работает. И вопрос еще не закрыт - отсутствие у Вас опыта решения моей проблемы не значит, что такого опыта нет в природе, согласитесь.
В приведенном документе вот что предлагается
Если вы знакомы с документацией, вы должны были заметить строчку
Возвращает TRUE в случае успешного завершения или FALSE в случае возникновения ошибки.
Вы столько тут разглагольствуете, вы эту функцию пробовали? "не получилось"? Пора менять язык реализации.
neolord добавил 21.02.2009 в 22:15
продолжение работы скрипта при получении данных из сокета
Не поделитесь фрагментом кода? Хочется на это посмотреть, как это вы многопоточную интерпретацию замутили в пхп.
Вы столько тут разглагольствуете
Не больше Вашего :) Если посмотреть внимательно, то все мои разглагольствования состоят из повторения моего вопроса.
вы эту функцию пробовали?
Пробовал socket_set_blocking, которая "Ровно одно и то же". Не факт, что пробовал применительно ко всему арсеналу средств работы с сокетами. Не факт, что то, что пробовал было попробовано корректно. От того и создал тему в этом разделе, чтобы сократить временные издержки на эксперименты, если кто-то успешно решивший проблему сочтет возможным поделиться своим опытом.
neolord, Вы же, вроде, для себя мой вопрос закрыли. Или не до конца еще? :)
P.S. Вам самому не приходилось на практике решать сходные задачи? Про флаг я в курсе.
Не больше Вашего :) Если посмотреть внимательно, то все мои разглагольствования состоят из повторения моего вопроса.
Пробовал socket_set_blocking, которая "Ровно одно и то же". Не факт, что пробовал применительно ко всему арсеналу средств работы с сокетами. Не факт, что то, что пробовал было попробовано корректно. От того и создал тему в этом разделе, чтобы сократить временные издержки на эксперименты, если кто-то успешно решивший проблему сочтет возможным поделиться своим опытом.
neolord, Вы же, вроде, для себя мой вопрос закрыли. Или не до конца еще? :)
P.S. Вам самому не приходилось на практике решать сходные задачи? Про флаг я в курсе.
ОМГ, ТС, просто ОМГ.
socket_set_blocking это псевдоним функции socket_set_block! И она *устанавливает* блокировку сокетов
вам же требуется socket_set_nonblock, которая *запрещает* блокировку сокетов. Вы ЭТУ функцию пробовали? Если она возвращает фолс, значит при вашем методе работы с сокетом неблокирующийся сокет попросту невозможно поднять.
На практике подобные задачи я решал как надо, с распаралелливанием процессов, иначе какой вам толк от такого сокета, если все равно требуется его синхронизировать для получения данных. И естественно это было написано на Си. Тем более зачем это в пхп я вообще не понимаю.
Кстати применительно именно к fsockopen все та же документация рекомендует использовать функцию stream_set_blocking
Для установки неблокирующегося режима нужно в mode поставить нолик.
Только вот эффективность этого метода в случае fsockopen мне представляется спорным, т.к. при вызове этой команды могут сразу начать передаваться данные (ответ сервера, доступность файла), причем в блокирующемся режиме, и только потом можно блокировку снять.
ОМГ, ТС, просто ОМГ.
socket_set_blocking это псевдоним функции socket_set_block! И она *устанавливает* блокировку сокетов
вам же требуется socket_set_nonblock, которая *запрещает* блокировку сокетов.
В омг уверены? На досуге посмотрите справку по socket_set_blocking. И обратите внимание на второй параметр. Буду рад, если дело дойдет до извинений с Вашей стороны.
Добавил позже: я смотрю, пост дополнили, пока я писал ответ :)