![]() |
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]() ![]() ![]() |
|
Levsha |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 294 Регистрация: 30.9.2005 Репутация: нет Всего: 4 |
Я осуществляю загрузку сразу нескольких страниц других сайтов стандартным методом "fopen-fgets-fclose". Страниц примерно 15.
Как понимаю, при загрузке страницы чужого сервера, тратится время на:
Следовательно даже не зависимо от ширины или скорости канала моего сервера, скорость загрузки сраниц будет доооолгой. Вопрос, возможно ли организовать загрузку сразу нескольких страниц одновременно? Примерно, я планирую что бы это выглядело так:
где $text соответсвенно будет массивом -------------------- Предлагаем создание сайта в Хабаровске - http://web-alt.ru. А ты сдал анализы? Самый полный анализ сайта! |
|||
|
||||
sTa1kEr |
|
||||||
9/10 программиста ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1553 Регистрация: 21.2.2007 Репутация: 11 Всего: 146 |
Для создания нескольких потоков существует 2 способа:
1. Для каждого нового потока запускать отдельный интерпретатор PHP. Это наиболее простой, но и наиболее корявый способ. Так же каждый новый псевдопоток будет съедать около 15мб памяти. Методика этого способа следующая: создаем отдельный скрипт вся работа которого заключается в том, что бы загрузить нужный сайт, URL сайта будет передаватся первым параметром. Затем просто запускаем этот скрипт для каждого URL-а. Для того что бы не ожидать окончание работы каждого такого скрипта, можно запустить его в фоновом режиме (для этого в конце команды нужно добавить &):
Но такой способ не будет работать в Windows. Другой способ не ждать окончания работы скрипта - это использовать proc-open
Вот и вся наука. 2. Более правильный способ. Заключается он в использовании Stream Functions совместно с stream_set_blocking() и stream_select(). Включение режима "non-blocking" позволяет не ждать когда поток будет доступен для чтения, а stream_select() позваляет из массива потоков выбирать тот поток(и), который доступен для чтения/записи данных в данный момент. Написал пример работы с потоками:
|
||||||
|
|||||||
Vbif |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 59 Регистрация: 25.2.2006 Где: Реутов Репутация: нет Всего: нет |
Жаль что такое чудо будет работать лишь на php5
|
|||
|
||||
Levsha |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 294 Регистрация: 30.9.2005 Репутация: нет Всего: 4 |
sTa1kEr, благодарю
![]() Выглядит это так:
Но есть проблема, при выдаче результата, скрипт также выдает серверные заголовки типа:
Как их убрать? Где именно они добавляются? Добавлено через 12 минут и 5 секунд И еще: как скачать ссылку типа http://sait.ru/script/fail.php?name=web&z=0&c=110 ? -------------------- Предлагаем создание сайта в Хабаровске - http://web-alt.ru. А ты сдал анализы? Самый полный анализ сайта! |
||||
|
|||||
Levsha |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 294 Регистрация: 30.9.2005 Репутация: нет Всего: 4 |
Снимаю вопрос: ссылка должна выглядеть вот так tcp://sait.ru:80/script/fail.php?name=web&z=0&c=110 Я Провел тест на время генерации страницы, вместо предидущих 19.38749сек я получил 8.105515сек ![]() ![]() Осталась только проблема серверных заголовков. Конечно переменную можно просто обработать, и убрать все что идет до первого тега, но имхо это неправильно. -------------------- Предлагаем создание сайта в Хабаровске - http://web-alt.ru. А ты сдал анализы? Самый полный анализ сайта! |
|||
|
||||
vasac |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1060 Регистрация: 4.5.2006 Репутация: нет Всего: 36 |
||||
|
||||
sTa1kEr |
|
||||||
9/10 программиста ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1553 Регистрация: 21.2.2007 Репутация: 11 Всего: 146 |
На 4ом не будет работать только функция stream_socket_client и соответственно асинхронное соединение. Вместо нее можно использовать обычный fsockopen. Все остальное будет работать и на 4ом PHP.
Вообще-то не совсем так... Коннектится нужно к tcp://sait.ru:80, а в запрос посылать уже полный урл.
Я бы разделил хидеры от контента через explode (вместо строчек 40-44):
Да, есть такое. Надо будет протестировать. Жаль только, что еще сыроват и плохо задокументирован. |
||||||
|
|||||||
teroni |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 381 Регистрация: 15.5.2007 Где: Днепропетровск Репутация: 1 Всего: 22 |
||||
|
||||
Levsha |
|
||||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 294 Регистрация: 30.9.2005 Репутация: нет Всего: 4 |
Некоторые сайты говорят в ответ:
Запрос идет такой
Может что-то неправильно?
Спасибо за еще одну гениальную идею ![]() -------------------- Предлагаем создание сайта в Хабаровске - http://web-alt.ru. А ты сдал анализы? Самый полный анализ сайта! |
||||||
|
|||||||
sTa1kEr |
|
||||
9/10 программиста ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1553 Регистрация: 21.2.2007 Репутация: 11 Всего: 146 |
Нет, не видел, да и наврядтли она будет, пока на амереканских зеркалах php.net нету нормально документации. Levsha, Да... я когда писал этот пример не учел что хост может выдать ошибку или его вовсе не существует. Нужно добавить проверку.
Сразу после stream_socket_client(). Добавлено через 11 минут и 28 секунд Так же на всякий случай еще можно проверять 3ий параметр stream_select(). Доработанный код:
|
||||
|
|||||
Levsha |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 294 Регистрация: 30.9.2005 Репутация: нет Всего: 4 |
sTa1kEr, но сайт то существует, более того, запрос перепроверял через браузер.
Все должно быть... -------------------- Предлагаем создание сайта в Хабаровске - http://web-alt.ru. А ты сдал анализы? Самый полный анализ сайта! |
|||
|
||||
vasac |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1060 Регистрация: 4.5.2006 Репутация: нет Всего: 36 |
Здесь должен указывать путь к документу на сайте, а не URL |
|||
|
||||
sTa1kEr |
|
|||
9/10 программиста ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1553 Регистрация: 21.2.2007 Репутация: 11 Всего: 146 |
Levsha, вы в $urls пишете ссылки вида tcp://sait.ru:80/script/fail.php?name=web&z=0&c=110 ?
|
|||
|
||||
Levsha |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 294 Регистрация: 30.9.2005 Репутация: нет Всего: 4 |
Все, нашел, мой был косяк
Добавлено через 1 минуту и 39 секунд
Да. Проглядел Host: $url -------------------- Предлагаем создание сайта в Хабаровске - http://web-alt.ru. А ты сдал анализы? Самый полный анализ сайта! |
|||
|
||||
sTa1kEr |
|
|||
9/10 программиста ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1553 Регистрация: 21.2.2007 Репутация: 11 Всего: 146 |
Код для *полных* URL-ов. Версия: 0.0.3 Pre Alpha
|
|||
|
||||
Levsha |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 294 Регистрация: 30.9.2005 Репутация: нет Всего: 4 |
sTa1kEr, я уже правда по своему исправил, но все равно спасибо
-------------------- Предлагаем создание сайта в Хабаровске - http://web-alt.ru. А ты сдал анализы? Самый полный анализ сайта! |
|||
|
||||
Levsha |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 294 Регистрация: 30.9.2005 Репутация: нет Всего: 4 |
Столкнулся с такой проблемой, закачивая страницы вышеописанным методом в текст документов иногда вставляются "левые" наборы символов типа: "15f", "25e4", "14bb". Почему это происходит? Может ли это быть некая защита сайтов?
И еще проблема. Как я понимаю, тот же вышеописанный метод использует кеширование? Как его включать и выключать? -------------------- Предлагаем создание сайта в Хабаровске - http://web-alt.ru. А ты сдал анализы? Самый полный анализ сайта! |
|||
|
||||
sTa1kEr |
|
|||
9/10 программиста ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1553 Регистрация: 21.2.2007 Репутация: 11 Всего: 146 |
Надо разбираться на конкретном примере.
Нет, кэширование не используется. Где вы это увидели? |
|||
|
||||
Levsha |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 294 Регистрация: 30.9.2005 Репутация: нет Всего: 4 |
Да просто браузер выдал одно, а сервер скачал другое...
Добавлено через 12 минут и 11 секунд Ну например если скачивать сайт с запросом: http://www.service-whois.ru/?domain=mail.ru получаю баги (на скриншоте) sTa1kEr, проверьте пожалуйста, может это только у меня глючит. Что примечательно, для http://www.service-whois.ru/?domain=yandex.ru такого нет. Присоединённый файл ( Кол-во скачиваний: 18 ) ![]() -------------------- Предлагаем создание сайта в Хабаровске - http://web-alt.ru. А ты сдал анализы? Самый полный анализ сайта! |
|||
|
||||
sTa1kEr |
|
|||
9/10 программиста ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1553 Регистрация: 21.2.2007 Репутация: 11 Всего: 146 |
||||
|
||||
teroni |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 381 Регистрация: 15.5.2007 Где: Днепропетровск Репутация: 1 Всего: 22 |
Да, сталкивался с такой же проблемой...
Из-за чего возникает - так и не понял, для решения - тупо обрезал все, до первого < и после последнего >. Мне кажется, что это каким-то образом зависит от хостинга, на котором расположена скачиваемая страница, т.к. на некоторых такая проблема не возникает. Это сообщение отредактировал(а) teroni - 20.6.2007, 11:14 |
|||
|
||||
sTa1kEr |
|
||||
9/10 программиста ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1553 Регистрация: 21.2.2007 Репутация: 11 Всего: 146 |
Разобрался в чем дело. Достаточно было повнимательнее почитать спецификацию HTTP 1.1
![]() Смысл этого хидера в крации: Для лучшего контроля передачи данных в HTTP 1.1 существует возможность передавать контент по частям с указанием размера каждой части. Сначала передается размер следующего блока (число в HEX и следующий за ним разделитель строки CRLF), затем сам блок и так далее пока размер блока не будет равен нулю (0 в самом конце). Я вижу три способа решения этой проблемы: 1. Опять же самое простое. Вместо HTTP 1.1 использовать HTTP 1.0. 2. Сначала получаем хидеры. Смотрим используется ли Chunked Coding (заголовок Transfer-Encoding: chunked). Если используется то полученный контент декодируем при помощи http://ru2.php.net/manual/ru/function.http...nked-decode.php. Но для этого придется установить соответствующее PECL расширение. 3. Имхо, самое правильное. Если предоставляется возможность дополнительного контроля целостности данных, то почему бы этим не воспользоваться?
Соответственно в функции MyDownload при чтении будет:
Это сообщение отредактировал(а) sTa1kEr - 20.6.2007, 17:58 |
||||
|
|||||
Levsha |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 294 Регистрация: 30.9.2005 Репутация: нет Всего: 4 |
Вот уж действительно раздел для профи...
Пытаюсь подстроить в свое... Отпишусь... -------------------- Предлагаем создание сайта в Хабаровске - http://web-alt.ru. А ты сдал анализы? Самый полный анализ сайта! |
|||
|
||||
Levsha |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 294 Регистрация: 30.9.2005 Репутация: нет Всего: 4 |
Есть, срабатывает шикарно, ошибок нет. Щас еще чутка доделаю-приделаю и выложу свою версию
![]() sTa1kEr, мегаспасибо -------------------- Предлагаем создание сайта в Хабаровске - http://web-alt.ru. А ты сдал анализы? Самый полный анализ сайта! |
|||
|
||||
Levsha |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 294 Регистрация: 30.9.2005 Репутация: нет Всего: 4 |
В общем если нужно - моя версия:
Основное отличие в том, что дается функции двумерный массив, а возвращается массив содержащий тело документа[0] и кодировку[1]. В принципе туда легко можно добавить любую другую информацию... -------------------- Предлагаем создание сайта в Хабаровске - http://web-alt.ru. А ты сдал анализы? Самый полный анализ сайта! |
|||
|
||||
Levsha |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 294 Регистрация: 30.9.2005 Репутация: нет Всего: 4 |
А вот и новая проблема, если один из скачиваемых сайтов не отвечает долгое время, т.е. вообще нет ответа от сервера, ни ошибки, ничего другого, то останавливается все, соответственно сайт встает. Возможно ли установить лимит по времени на ответ сервера, чтобы по истечении возвращалась бы пустая строка или что-то вроде... Ну в общем лишь бы сайт не вставал.
-------------------- Предлагаем создание сайта в Хабаровске - http://web-alt.ru. А ты сдал анализы? Самый полный анализ сайта! |
|||
|
||||
Levsha |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 294 Регистрация: 30.9.2005 Репутация: нет Всего: 4 |
У меня ощущение что $timeout не работает.. Я так понимаю, $timeout=30 подразумевает секунды? А страница прогружается за пять секунд, не выдав никакого результута...
Есть соображения у кого? -------------------- Предлагаем создание сайта в Хабаровске - http://web-alt.ru. А ты сдал анализы? Самый полный анализ сайта! |
|||
|
||||
sTa1kEr |
|
|||
9/10 программиста ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1553 Регистрация: 21.2.2007 Репутация: 11 Всего: 146 |
Странно... Если хоста не существует, то поток не будет создан. А если будет ошибка, то он попадет в массив $eStreams и будет благополучно выброшен. Можете привести пример хоста из-за которого он зацикливается?
$timeout - это таймаут только для соединения с сервером. Т.ч. вполне возможно, что он законнектиться с сервером за 5 секунд и тут же сервер вернет ошибку. |
|||
|
||||
Levsha |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 294 Регистрация: 30.9.2005 Репутация: нет Всего: 4 |
Хост существует, просто он долго думает что ответить... Ну это в прошлом...
Сейчас просто если я делаю закачку 11 требуемых документов, то происходит ошибка, причем на удаленном сервере он вообще не выдает ошибки, просто работа приостанавливается, даже при включенном error_reporting и display_errors. А локально выдается
А 301я строка - это первая строка цикла:
Добавлено @ 15:30 Можно ли сделать, чтобы он вообще если не успел ниче за 30 сек, то пусть вообще пустые строки вернет. Это сообщение отредактировал(а) Levsha - 25.6.2007, 15:30 -------------------- Предлагаем создание сайта в Хабаровске - http://web-alt.ru. А ты сдал анализы? Самый полный анализ сайта! |
||||
|
|||||
sTa1kEr |
|
||||||||
9/10 программиста ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1553 Регистрация: 21.2.2007 Репутация: 11 Всего: 146 |
Хм, сервер вернул контент без хидера или просто скрипт не успел все скачать. Попробуйте увеличьте максимальное время работы скрипта.
И добавьте проверку
В этом мире нету ничего невозможного. В начале функции в переменную запишите метку времени и добавьте в цикл условие. Можно добавить в цикл для чтения данных такую же проверку. Можно воспользоваться register_shutdown_function(), но тогда при таймауте не удастся вывести ничего в браузер.
Это сообщение отредактировал(а) sTa1kEr - 25.6.2007, 16:16 |
||||||||
|
|||||||||
Levsha |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 294 Регистрация: 30.9.2005 Репутация: нет Всего: 4 |
-------------------- Предлагаем создание сайта в Хабаровске - http://web-alt.ru. А ты сдал анализы? Самый полный анализ сайта! |
|||
|
||||
Levsha |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 294 Регистрация: 30.9.2005 Репутация: нет Всего: 4 |
sTa1kEr, спасибо, заработало... Я думаю set_time_limit(90); помог.
Добавлено через 3 минуты и 36 секунд Кстати созданный благодаря этому продукт... http://web-alt.ru/stat -------------------- Предлагаем создание сайта в Хабаровске - http://web-alt.ru. А ты сдал анализы? Самый полный анализ сайта! |
|||
|
||||
aktuba |
|
|||
![]() Смышленный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1915 Регистрация: 24.4.2006 Где: Планета Земля Репутация: нет Всего: 38 |
Levsha, что-то у тебя не так работает. Попробуй введи nnm.ru и посмотри, сколько выведет проиндексированных страниц в Яндексе. Всего 2, в то время, как почти по любому запросу nnm.ru попадает в результаты поиска.
-------------------- ![]() |
|||
|
||||
sTa1kEr |
|
|||
9/10 программиста ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1553 Регистрация: 21.2.2007 Репутация: 11 Всего: 146 |
Для большинства сайтов выдает пустую страницу.
Добавлено через 5 минут и 22 секунды Levsha, кстати, забавно, если ввести URL сайта web-alt.ru/stat/?url=ya.ru, то он отрабатывает нормально ![]() |
|||
|
||||
Levsha |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 294 Регистрация: 30.9.2005 Репутация: нет Всего: 4 |
aktuba, ну так ты по ссылке ходил? Там действительно две страницы... Это нестрашно, пару дней назад я застал ситуацию, когда яндекс показывал что для моего сайта вообще нет проиндексированных страниц, хотя всегда показывал 49. У Яндекса такое бывает, и на выдачу это не влияет, просто какой-то пересчет данных...
aktuba, спасибо, что воспользовался серсисом. Буду рад слышать рекомендации и советы. Только тему желательно обсуждать здесь. Добавлено @ 18:27 Да нет, я пробовал, ничего страшного не случается. Домен отделяется от остальной части, и по нему идет анализ, то что после "?" практически не учавствует в анализе Добавлено @ 18:30 Большие проблемы с кодировками, непрерывно работаю над проектом уже 12 часов - сказывается Это сообщение отредактировал(а) Levsha - 25.6.2007, 18:30 -------------------- Предлагаем создание сайта в Хабаровске - http://web-alt.ru. А ты сдал анализы? Самый полный анализ сайта! |
|||
|
||||
aktuba |
|
|||
![]() Смышленный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1915 Регистрация: 24.4.2006 Где: Планета Земля Репутация: нет Всего: 38 |
Я вообще-то там модер =))) Две страницы говоришь? Это на сайте, с более 1 000 000 зарегистрированных пользователей, более 20 000 личных дневников, в каждом из которых от 1 до 100 и более страниц по 15 новостей, а каждая новость - отдельная страница??? Чего-то ты загнул... -------------------- ![]() |
|||
|
||||
Levsha |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 294 Регистрация: 30.9.2005 Репутация: нет Всего: 4 |
aktuba, по ссылке под цифрой 2 ты сходил??? Эх, все надо делать самому...
Вот эта ссылка. Как видишь, там действительно две страницы. Я всего лишь транслирую их результат. Повторяю, либо это временный глюк Яндекса, либо пиши платону Добавлено через 2 минуты и 2 секунды sTa1kEr, абсолютно все работает нормально, пока я не использую функцию MyDownload Она постоянно в чем-нибудь глючит... Абидна -------------------- Предлагаем создание сайта в Хабаровске - http://web-alt.ru. А ты сдал анализы? Самый полный анализ сайта! |
|||
|
||||
sTa1kEr |
|
|||
9/10 программиста ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1553 Регистрация: 21.2.2007 Репутация: 11 Всего: 146 |
Кто сказал, что все сразу должно идеально работать, к тому же если учесть, что изначально она писалась как пример? С какими именно URL-ами она не работает и что не работает? Т.к. локально у меня проблем не обнаружилось. |
|||
|
||||
Levsha |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 294 Регистрация: 30.9.2005 Репутация: нет Всего: 4 |
sTa1kEr, так в том то и проблема,что не могу отловить на котором url происходит ошибка. У меня есть смутное сомнение, что на хостинге хреновый канал, и сайт просто не успевает ничего скачивать...
-------------------- Предлагаем создание сайта в Хабаровске - http://web-alt.ru. А ты сдал анализы? Самый полный анализ сайта! |
|||
|
||||
sTa1kEr |
|
|||
9/10 программиста ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1553 Регистрация: 21.2.2007 Репутация: 11 Всего: 146 |
Написал простой класс работы с потоками (примерно тоже, что здесь выкладывали, только слегка модернизировал). Что бы не засорять форум исходниками выложил его в гугле http://multi-downoader.googlecode.com/svn/trunk/Downloader/ Там же лежит тестовый скрипт и лог выполнения этого скрипта у меня. Все 104 страницы скачались без проблем, правда как показал тест, производительность не высокая, как ожидалось. 44 секунды...
Levsha, попробуйте запустите тест, если будет ошибка, то в логах ее будет видно. Только не забудьте set_time_limit побольше поставить. Это сообщение отредактировал(а) sTa1kEr - 26.6.2007, 13:41 |
|||
|
||||
Levsha |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 294 Регистрация: 30.9.2005 Репутация: нет Всего: 4 |
sTa1kEr, спасибо, протестирую
-------------------- Предлагаем создание сайта в Хабаровске - http://web-alt.ru. А ты сдал анализы? Самый полный анализ сайта! |
|||
|
||||
nerezus |
|
|||
![]() Вселенский отказник ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3330 Регистрация: 15.6.2005 Репутация: нет Всего: 43 |
А почему именно пхп применяется для такой задачи? Не проще ли заюзать другой ЯП с поддержкой потоков(нитей)?
|
|||
|
||||
Levsha |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 294 Регистрация: 30.9.2005 Репутация: нет Всего: 4 |
Потому что я умею программировать на PHP
![]() Какой ЯП по твоему лучше подойдет? -------------------- Предлагаем создание сайта в Хабаровске - http://web-alt.ru. А ты сдал анализы? Самый полный анализ сайта! |
|||
|
||||
sTa1kEr |
|
|||
9/10 программиста ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1553 Регистрация: 21.2.2007 Репутация: 11 Всего: 146 |
Интересна реализация именно на пхп, т.к. на .NET, к примеру, это просто и очевидно, но подходит только для Windows платформ. На других прикладных языках будет слишком тяжело работать именно c Web (то , что на PHP одна встроенная функция, на C++ уже может потребовать своего объемного класс), а интегрировать PHP скрипт с какой-либо внешней программой- не менее проблематично, как и создавать мультипоточность в скриптовом языке. И еще просто спортивный интерес, реализовывать на PHP то, для чего он в принципе не предназначен ![]() nerezus, мне то же интересно, на каком языке вы предлагаете это реализовывать? Это сообщение отредактировал(а) sTa1kEr - 28.6.2007, 10:36 |
|||
|
||||
sTa1kEr |
|
||||
9/10 программиста ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1553 Регистрация: 21.2.2007 Репутация: 11 Всего: 146 |
Еще одно замечание по работе со stream functions. Как-то я совсем упустил из виду эту важную деталь... При отключенной блокировке потока, он не ждет данные, а только забирает то, что уже пришло на данный момент, поэтому просто использовать циклы нельзя, т.к. при очередной итерации данных еще может не быть и fread() вернет false... Поэтому нужно перед чтением либо включать блокировку
Либо проверять на доступность, через тот же stream_select каждый раз
|
||||
|
|||||
vasac |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1060 Регистрация: 4.5.2006 Репутация: нет Всего: 36 |
Блокировку включать нельзя. Какой тогда смысл в ее отключении?
Нужно просто не проверять fRead на false, а смотреть fEof |
|||
|
||||
sTa1kEr |
|
|||
9/10 программиста ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1553 Регистрация: 21.2.2007 Репутация: 11 Всего: 146 |
Смысл в асинхронных соединении, отправке запроса и получения ответа. Но вы правы, что читать данные будет эффективнее именно во втором случае. Просто проверять на eof не достаточно, нужно так же проверять и на false иначе цикл будет идти в пустую. Это сообщение отредактировал(а) sTa1kEr - 28.6.2007, 13:19 |
|||
|
||||
vasac |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1060 Регистрация: 4.5.2006 Репутация: нет Всего: 36 |
Ну и пусть идет впустую. Думаете шестеренке в процессоре износятся?
|
|||
|
||||
sTa1kEr |
|
|||
9/10 программиста ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1553 Регистрация: 21.2.2007 Репутация: 11 Всего: 146 |
||||
|
||||
nerezus |
|
|||
![]() Вселенский отказник ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3330 Регистрация: 15.6.2005 Репутация: нет Всего: 43 |
sTa1kEr, а чем плохи питон? или даже джава(крупная артиллерия)?
|
|||
|
||||
sTa1kEr |
|
|||
9/10 программиста ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1553 Регистрация: 21.2.2007 Репутация: 11 Всего: 146 |
Питон... я его почти не знаю, мне с первого знакомства не понравился его синтаксис и я не стал с ним разбиратся (хотя, может быть, зря...). Джава да, вполне подошла бы, но все же на ней намного сложнее разрабатывать веб приложения, нежели на PHP. Да и для нее требуется JRE... Наверное, тогда уж лучше всего бы подошел Mono (кроссплатформенный .NET, артиллерия будет не слабее Джавы!), но он еще сыроват и для него нету хорошего IDE... Кстати, есть пару интересных абзацев в статье Рынок разработки переполнен недоучками – PHP и хорош и плох своей простотой. Из-за этой простоты и начинаешь требовать от PHP почти не возможного, потому-что иначе - не интересно ![]() |
|||
|
||||
Levsha |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 294 Регистрация: 30.9.2005 Репутация: нет Всего: 4 |
sTa1kEr, я прогнал ваши скрипты(на гугле которые). Действительно работает лучше первого скрипта. Пытаюсь подогнать под себя.
-------------------- Предлагаем создание сайта в Хабаровске - http://web-alt.ru. А ты сдал анализы? Самый полный анализ сайта! |
|||
|
||||
Levsha |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 294 Регистрация: 30.9.2005 Репутация: нет Всего: 4 |
Отлично, скрипты работают гораздо точнее. Но вот проблема - не качается webalta.
Например
Добавлено через 1 минуту и 10 секунд Я опасаюсь что на webalte могли просто забанить мой IP. Проверьте пожалста у себя. -------------------- Предлагаем создание сайта в Хабаровске - http://web-alt.ru. А ты сдал анализы? Самый полный анализ сайта! |
|||
|
||||
sTa1kEr |
|
|||
9/10 программиста ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1553 Регистрация: 21.2.2007 Репутация: 11 Всего: 146 |
Levsha, работает, но почему-то сервер выдает 500ую ошибку. Причем в браузере тоже сначала выдавал, теперь в браузере нормально. Надо с запросом поколдавать.
|
|||
|
||||
Levsha |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 294 Регистрация: 30.9.2005 Репутация: нет Всего: 4 |
Я с портами пробовал, все равно глючит... Да вебальта вся какая-то кривая...
-------------------- Предлагаем создание сайта в Хабаровске - http://web-alt.ru. А ты сдал анализы? Самый полный анализ сайта! |
|||
|
||||
Anarki |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 326 Регистрация: 14.3.2005 Репутация: 1 Всего: 11 |
Единственное, что fsockopen может оказаться большим тормозом в такой системе, ибо он ресолвит имена и создает подключение и прервать никак нельзя. Поэтому для быстройдействия нужно будет отказаться от fsockopen и streams в сторону socket функций |
|||
|
||||
teroni |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 381 Регистрация: 15.5.2007 Где: Днепропетровск Репутация: 1 Всего: 22 |
sTa1kEr, можно вопросик по скрипту с потоками... Почему он так сервер грузит? У меня вот просто рефрешем страницы с этим скриптом (качается 6 потоков инфы каждый раз) Апач убивается за полчаса
![]() |
|||
|
||||
sTa1kEr |
|
|||
9/10 программиста ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1553 Регистрация: 21.2.2007 Репутация: 11 Всего: 146 |
teroni, хм... не наблюдал такого. А что говорит top во время скрипта? Какой процесс грузит сервер и сколько съедает памяти? Как часто рефреш происходит?
|
|||
|
||||
Levsha |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 294 Регистрация: 30.9.2005 Репутация: нет Всего: 4 |
teroni, использую скрипт 150-250 раз в день по 20 потоков уже месяца два. Никаких проблем.
-------------------- Предлагаем создание сайта в Хабаровске - http://web-alt.ru. А ты сдал анализы? Самый полный анализ сайта! |
|||
|
||||
![]() ![]() ![]() |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | PHP: Для профи | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |