» WAP Мастер Форум https://forum.wapinet.ru/index.php » PHP https://forum.wapinet.ru/viewforum.php?id=3 » Программирование сокетов в php https://forum.wapinet.ru/viewtopic.php?id=2279 |
TLENS » 2014.02.28 20:59 | ||||||||||||
Решил написать очередной велосипед те расширение для php но хотел бы узнать мало ли может он уже существует. | ||||||||||||
TLENS » 2014.03.01 00:08 | ||||||||||||
В общем разобрался я с react. Довольно таки не плохая библиотека. Жаль что я раньше не узнал что php может работать с неблокирующими сокетами. Да и вообще удивительно что он может работать с ними на низком уровне. Код:
Результаты довольно таки не плохие Показать/Скрыть array(2) { [1]=> string(37) "this google parser. Length data 11524" [0]=> string(39) "this youtube parser. Length data 219009" } 0.35132312774658 Завтра уже усовершенствую ее. А сейчас спать охота | ||||||||||||
Gemorroj » 2014.03.01 06:54 | ||||||||||||
а чем нативный curl_multi_* не подошел? | ||||||||||||
TLENS » 2014.03.01 12:25 | ||||||||||||
спасибо. | ||||||||||||
TLENS » 2014.03.02 01:32 | ||||||||||||
Gemorroj curl_multi по результатам моих тестов во много раз медленнее чем напрямую работать с сокетами Код:
Показать/Скрыть root@cs12621:/home/www# php test.php curl_multi: 6.0599839687347 socket: 4.1367900371552 root@cs12621:/home/www# php test.php curl_multi: 6.2453439235687 socket: 4.0472211837769 root@cs12621:/home/www# php test.php curl_multi: 6.112576007843 socket: 4.0291259288788 | ||||||||||||
TLENS » 2014.03.02 01:42 | ||||||||||||
Вот только столкнулся со следующей проблемой. Понятия не имею как работать с tls соединениями. Можно было бы использовать stream_socket_client но тут проблема с блокировкой сокета. Почему то не хочет сниматься блокировка с сокетов. Пробовал так Код:
| ||||||||||||
TLENS » 2014.03.02 14:13 | ||||||||||||
Короче я тут крутил крутил. И обратил внимание что используя ssl/tls протокол подключение значительно затягивается во времени раза в сто. Возможно что stream_socket_client используя ssl игнорирует параметр STREAM_CLIENT_ASYNC_CONNECT блокирует сокет пока не составит подпись только после делает его неблокирующим и возвращает управление. | ||||||||||||
Gemorroj » 2014.03.02 14:35 | ||||||||||||
TLENS, нет, я не работал с сокетами на таком уровне. Я бы не заморачивался и использовал CURL =) | ||||||||||||
TLENS » 2014.03.03 14:43 | ||||||||||||
Ну да я все таки решил взяться за курл и не морочить себе мозги. А на будущее найму человека что бы переписал функцию под сокеты) | ||||||||||||
TLENS » 2014.03.07 02:10 | ||||||||||||
В общем запилил себе такой класс. Удобно работать. Код:
Воспроизводится что то вроде этого. Код:
| ||||||||||||
Gemorroj » 2014.03.07 07:42 | ||||||||||||
TLENS, а почему use не пользуешься, а пишешь неймспейсы постоянно? | ||||||||||||
TLENS » 2014.03.08 10:26 | ||||||||||||
Ну данный вызов класса находится в глобальной области. По этому и не юзал пространство. Да и вообще привычка не юзать прастранства. Видимо опасаюсь несовместимости.
Вообще то не планировал целый проект в публику выносить по соображениям безопасности. Но пока месть он то и не готов, только только формируется архитектура сайта. Потом может и сверкну гитхабом но только в приватном доступе. | ||||||||||||
TLENS » 2014.05.21 16:55 | ||||||||||||
Внес некоторые критические обновления в класс. На другой машине метод run() ни разу не выполнился быстрее чем за 1 сек. в логах как правило ~1.001. Пришлось подправить пару строк начиная с 99ой Код:
| ||||||||||||
TLENS » 2014.05.21 17:26 | ||||||||||||
Кстати только что допилил интересный класс для работы. Код:
ну и собственно сам класс) Код:
| ||||||||||||
Gemorroj » 2014.05.22 08:48 | ||||||||||||
а класс Link где? Код:
| ||||||||||||
TLENS » 2014.05.22 11:08 | ||||||||||||
Ну собственно архитектура так и выглядит в классе CurlMulti. Код:
Код:
И да слово "правильная" архитектура относительное. Код:
Можно еще имплементировать от итераторов почему бы и нет. Но мне как то не по приколу этим страдать. Но рахитектура получается довольно таки гибкой и интересной. | ||||||||||||
TLENS » 2014.05.26 00:13 | ||||||||||||
Какая то каша получилась у меня. В ходе работы оказалось что он не совсем то и универсальный. В общем переписал все. Закрыл конструктор сделал класс синглтоном. И теперь курлмульти принимает не url а курловские дескрипторы (Разумеется добавил метод addUrl для дефолтной загрузки) так же отказался от Link и Ip. Еще добавил полезную штуку что бы функция добавления дескриптора возвращала ссылку на ячейку стека куда запишется результат каллбека типо: | ||||||||||||
TLENS » 2014.05.26 17:43 | ||||||||||||
И опять столкнулся с проблемой. Нельзя добавлять линки на загрузку из каллбека)) | ||||||||||||
Gemorroj » 2014.05.26 19:32 | ||||||||||||
подробнее? | ||||||||||||
TLENS » 2014.05.27 11:27 | ||||||||||||
Да это проблема в архитектуре стек нужно переделать Просто у меня метод exec после исполнение всех callback функций закрывает все дескрипторы и очищает стеки. И если из каллбека я добавлю в стек какой то дескриптор. То мой мусорщик подумает что он уже загружен и тут же закроет и удалит его. Вместо переделывание класса из-за лени сделал костыль и обошелся без добавления ссылок на загрузку из каллбека. (Пишу что то вроде поискового паука те собираю данные с разных ресурсов) |