timo-71#: В вебстроительстве главная польза от асинк/авайт, это операции ввода-вывода, когда надо подождать (то, что на скрине 0.455 сек).
Вот это подождать на бекенде теоретически может быть заменено другими подходами. Гипотетический пример: нам нужно в кабинете мелкооптового продавца получить данные о товарах доступных на складе у оптового продавца, при заходе на страницу мы отправляем куда-то запрос, заносим запрос в очередь, загружаем страницу с неким js-виджетом, на котором написано "Получается информация" и уже он делает запросы к серверу, получая информацию исполнен ли запрос. Или же даже сам виджет может общаться с сайтом оптовика по ajax, web-socket'ам или, наверное, выше рекомендованным server-sent events. В этом случае переносим переносим на сторону клиента.
timo-71#: Но, зачастую, выгода нивелируются практическим применением.
Бекенд обычного веба больше синхронный по логике, чем асинхронный. Грубо говоря, сначала получаем информацию о пользователе, а потом смотрим, что ему можно показать. Чем сложнее проект и чем ближе к веб-приложениям, а не вебсайтам, тем больше там места асинхронности. Имхо, естественно. :)
timo-71#: Для расширения кругозора, хотел пример кода с использованием какой то асинхронной библиотеки на пхп, когда скрипт, выполняя 2 задачи, отрабатывает за x сек, тогда как время затраченное на 2 документов составило 2х.
<?php
require_once('../protected/vendor/autoload.php');
use GuzzleHttp\Client; use GuzzleHttp\Promise\PromiseInterface;
$client = new Client();
$timing = [];
$function = function (PromiseInterface $promise) use (&$timing) { $startTime = microtime(true);
return $promise->then(function ($response) use ($startTime, &$timing) { $dom = new DOMDocument();
Это если через Guzzle - там под капотом, если я не ошибаюсь древний как мамонт multi_curl, который я ещё лет 10, как минимум, назад использовал. Для чего-то более современного нужно немного глубже копнуться в reactPHP или что-то подобное, но это могло занять больше времени.
Ну, и чтобы красивее, по-хорошему, нужно было бы парсить дом через какую-то более красивую по синтаксису библиотеку (если не ошибаюсь Crawler от Symfony подошёл бы, но у меня в докере какой-то вообще минимальный набор экстеншенов для php, нужно было добавлять, а мне лень было, ну а composer ругнулся).
Для вебсокетов я использую центрифугу не используя какие то велосипеды =))
Ну, мне тогда нужно было бы, чтобы программеру было меньше разбираться. То есть, PHP был первым вариантом выбора + нужно было с реактом (который JS, а не reactPHP) разобраться, потому что сторонняя библиотека, которую я решил использовать в проекте, был на нём написана. И чтобы я мог подключаться время от времени не тратя время на изучения нового. :)
timo-71#: Т.е, скрипт отработал за 0.62932, тогда как время затраченное на доставку 2 документов с этой темы составило 1.22971
Подскажите, что какую мысль вы хотите донести, суммируя время доставки двух страниц?
Это то что я знаю, тестил и живее всех живых. Но писать асинхронный код в php идея не очень благодарная, большинство драйверов блокирующие, надо писать а потом поддерживать обертки неблокирующие, большая часть библиотек написана в той парадигме что после запроса все чистится и в 98% случаев сторонних либ потечет память..... в целом это узкий инструмент достаточно, например чтоб реализовать свой сокет сервер и то если прям очень нужно, а то лучше на голанг все таки глянуть или на крайний случай на ноду
Для вебсокет-сервера использовали в своё время (лет 5 назад) https://github.com/ratchetphp/Ratchet , кажется, поверх reactPHP написан. Пришлось, правда, копнуться поглубже, так как в лоб текла память, но когда понял логику, то исправил ошибку у нас в коде (деталей уже не помню, кажется, реальность и документация отличались) и проект заработал. Через некоторое время проект задвинулся на задний план и я о нём призабыл. Через какое-то длительное время (может через несколько месяцев, если не через полгода) решил зайти глянуть, что там - все ок, утечек не было, сам вебсокет-сервер работал. Из одного источника, если мне память не изменяет данные получались. С другого - нет, но там чисто программно нужно было что-то типа сессии перезапускать раз в несколько дней, то есть, это не проблема ни php, ни его ассинхронности, а чисто организационный вопрос.
То есть, асинхронность в пхп уже давно есть, но да, согласен, нужно писать с оглядкой на окружение на сервере.
Dmitriy_2014 : Я знаю, что с разным регистром это вполне нормально, ну типа MyFoto.jpgи myfoto.jpgнесмотря на одинаковое название это два разных файла, в винде такое не прокатит, а вот может ли быть в Linuxдва файла с абсолютно одинаковым названием типа myfoto.jpgи myfoto.jpgв одной директории и без этого хитрого трюка с разным регистром символов.
Cмотря, что вы имеете в виду под одинаковым видом файлов и какая задача. Если одинаково выглядящие, то замените "o" латиницей на "о" кириллицей и получите одинаково выглядящие имена файлов. По идее такое же даже в винде должно прокатить.
А вот именно, чтобы точно одинаковое, то система не даёт сделать.
$promises = [
$function($client->getAsync('1074587')),
$function($client->getAsync('1074587')),
];
Тут почему-то серч съел кусок урла при редактировании поста, как я сейчас заметил.
Должно быть:
В вебстроительстве главная польза от асинк/авайт, это операции ввода-вывода, когда надо подождать (то, что на скрине 0.455 сек).
Вот это подождать на бекенде теоретически может быть заменено другими подходами. Гипотетический пример: нам нужно в кабинете мелкооптового продавца получить данные о товарах доступных на складе у оптового продавца, при заходе на страницу мы отправляем куда-то запрос, заносим запрос в очередь, загружаем страницу с неким js-виджетом, на котором написано "Получается информация" и уже он делает запросы к серверу, получая информацию исполнен ли запрос. Или же даже сам виджет может общаться с сайтом оптовика по ajax, web-socket'ам или, наверное, выше рекомендованным server-sent events. В этом случае переносим переносим на сторону клиента.
Но, зачастую, выгода нивелируются практическим применением.
Бекенд обычного веба больше синхронный по логике, чем асинхронный. Грубо говоря, сначала получаем информацию о пользователе, а потом смотрим, что ему можно показать. Чем сложнее проект и чем ближе к веб-приложениям, а не вебсайтам, тем больше там места асинхронности. Имхо, естественно. :)
Для расширения кругозора, хотел пример кода с использованием какой то асинхронной библиотеки на пхп, когда скрипт, выполняя 2 задачи, отрабатывает за x сек, тогда как время затраченное на 2 документов составило 2х.
Это если через Guzzle - там под капотом, если я не ошибаюсь древний как мамонт multi_curl, который я ещё лет 10, как минимум, назад использовал. Для чего-то более современного нужно немного глубже копнуться в reactPHP или что-то подобное, но это могло занять больше времени.
Ну, и чтобы красивее, по-хорошему, нужно было бы парсить дом через какую-то более красивую по синтаксису библиотеку (если не ошибаюсь Crawler от Symfony подошёл бы, но у меня в докере какой-то вообще минимальный набор экстеншенов для php, нужно было добавлять, а мне лень было, ну а composer ругнулся).
Для вебсокетов я использую центрифугу не используя какие то велосипеды =))
Ну, мне тогда нужно было бы, чтобы программеру было меньше разбираться. То есть, PHP был первым вариантом выбора + нужно было с реактом (который JS, а не reactPHP) разобраться, потому что сторонняя библиотека, которую я решил использовать в проекте, был на нём написана. И чтобы я мог подключаться время от времени не тратя время на изучения нового. :)
Т.е, скрипт отработал за 0.62932, тогда как время затраченное на доставку 2 документов с этой темы составило 1.22971
Подскажите, что какую мысль вы хотите донести, суммируя время доставки двух страниц?
Таких инструментов же уже вагон и маленькая тележка:
- swoole
- reactphp
- workerman
- amphp
- roadrunner (app server)
Это то что я знаю, тестил и живее всех живых. Но писать асинхронный код в php идея не очень благодарная, большинство драйверов блокирующие, надо писать а потом поддерживать обертки неблокирующие, большая часть библиотек написана в той парадигме что после запроса все чистится и в 98% случаев сторонних либ потечет память..... в целом это узкий инструмент достаточно, например чтоб реализовать свой сокет сервер и то если прям очень нужно, а то лучше на голанг все таки глянуть или на крайний случай на ноду
Для вебсокет-сервера использовали в своё время (лет 5 назад) https://github.com/ratchetphp/Ratchet , кажется, поверх reactPHP написан. Пришлось, правда, копнуться поглубже, так как в лоб текла память, но когда понял логику, то исправил ошибку у нас в коде (деталей уже не помню, кажется, реальность и документация отличались) и проект заработал. Через некоторое время проект задвинулся на задний план и я о нём призабыл. Через какое-то длительное время (может через несколько месяцев, если не через полгода) решил зайти глянуть, что там - все ок, утечек не было, сам вебсокет-сервер работал. Из одного источника, если мне память не изменяет данные получались. С другого - нет, но там чисто программно нужно было что-то типа сессии перезапускать раз в несколько дней, то есть, это не проблема ни php, ни его ассинхронности, а чисто организационный вопрос.
То есть, асинхронность в пхп уже давно есть, но да, согласен, нужно писать с оглядкой на окружение на сервере.
Я знаю, что с разным регистром это вполне нормально, ну типа MyFoto.jpg и myfoto.jpg несмотря на одинаковое название это два разных файла, в винде такое не прокатит, а вот может ли быть в Linux два файла с абсолютно одинаковым названием типа myfoto.jpg и myfoto.jpg в одной директории и без этого хитрого трюка с разным регистром символов.
Cмотря, что вы имеете в виду под одинаковым видом файлов и какая задача. Если одинаково выглядящие, то замените "o" латиницей на "о" кириллицей и получите одинаково выглядящие имена файлов. По идее такое же даже в винде должно прокатить.
А вот именно, чтобы точно одинаковое, то система не даёт сделать.
На прием он и раньше работал.
Не работал. Можно было только подключить карту и оплачивать что-то. Теперь можно и получать.
Но из минусов - это временная поблажка, если верить пресс-релизу, кажется, до 30 июня. Но надеемся, всё же лед сдвинулся.
Интересно, как это стыкуется с введенными за последние годы стопиццот условиями по финмониторингу и прочему контролю.
Может теперь и Вебмани включат?
Там суммы до определенных величин не подпадают под финконтроль. Ну, и требования от банка к банку отличаются.