|
Асинхронный режим на сервере
|
|||
---|---|---|---|
#18+
Есть самописный сайт на PHP. В некоторых случаях сайт обращается ко внешней системе для получения данных (REST-сервис), а затем отображает полученные данные пользователю. Для некоторых запросов время их выполнения может быть довольно заметным (3-5 секунд, может быть даже до 10 секунд). Как следует обрабатывать такие запросы? Ждать ответа (и соответственно пользователь тоже будет ждать), а затем вернуть результат? Или вернуть пользователю страницу "Ждите", а затем через несколько секунд ее обновить? Можно ли это сделать без внешнего MQ, ведь если пользовательский запрос будет обработан, то веб-сервер завершит поток и возвращать ответ от внешней системы будет некуда. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.02.2020, 14:52 |
|
Асинхронный режим на сервере
|
|||
---|---|---|---|
#18+
Alibek B. Ждать ответа (и соответственно пользователь тоже будет ждать), а затем вернуть результат? Или вернуть пользователю страницу "Ждите", а затем через несколько секунд ее обновить? Вариант, когда внешний сервис недоступен и возвращать в ответе нечего, вообще не рассматривается? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.02.2020, 19:50 |
|
Асинхронный режим на сервере
|
|||
---|---|---|---|
#18+
Что можно кешировать, разумеется кешируется. Но не все получится. Если внешний сервис не ответил за определенное время, сайт покажет сообщение о недоступности данных. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.02.2020, 20:31 |
|
Асинхронный режим на сервере
|
|||
---|---|---|---|
#18+
Ну ставите задачу в очередь, воркеры ее решают и записывают результат по завершению. А пока идут расчеты клиентская часть либо с небольшим интервалом ведет опрос пока не будет готов результат, либо подписывается на уведомления и ожидает результат какой-то. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2020, 21:38 |
|
Асинхронный режим на сервере
|
|||
---|---|---|---|
#18+
Это и есть «внешние MQ». Других способов нет? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2020, 22:18 |
|
Асинхронный режим на сервере
|
|||
---|---|---|---|
#18+
Других... Ну, если только попробовть сбагрить работу с внешкой непосредственно на клиента. Вроде, этот вариант пока не упоминали. :) ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2020, 22:35 |
|
Асинхронный режим на сервере
|
|||
---|---|---|---|
#18+
Ну тогда по сути и веб-сервер не нужен, достаточно статичных html. Но это сильно все осложнит, REST-сервер не рассчитывался на работу с непосредственно посетителями. Там и авторизацию нужно пересматривать, и код пересматривать. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2020, 22:41 |
|
Асинхронный режим на сервере
|
|||
---|---|---|---|
#18+
Alibek B., Так и смотрите, какой вариант более оптимальный, какой более подходящий. По сути, вебсервер, который обращается к внешке, является прокси. Допускаю, конечно, что на нем какая-то обработка данных происходит. Однако, в описываемом контексте его задача состоит в том, чтобы получить данные с внешки и отдать их клиенту. Притом, из-за тормозов внешки возникла дилемма - то ли долго ждать ответа от внешки, то ли нагрузить вебсервер дополнительными запросами от клиента "ну что, готово уже?" или замутить ответы на PUSH технологии. Вот я даже не знаю, что проще. По мне так ни тот, ни другой вариант не нравятся в первом приближении. Пересматривать и переделывать, конечно, тоже некузяво. Однако, может статься, что оно окажется соизмеримо по трудозатратам, а может и проще. В случае переделки попутно избавляетесь от прокладки в виде прокси. Разумеется, если это возможно в принципе. Третий вариант, с предварительным запросом данных от внешки и их локальным кешированием на вебсервере, который в роли прокси, так понимаю, невозможен в принципе. Alibek B. достаточно статичных html ... |
|||
:
Нравится:
Не нравится:
|
|||
19.02.2020, 00:02 |
|
Асинхронный режим на сервере
|
|||
---|---|---|---|
#18+
Ну я собственно и спросил, может быть есть другие способы или наработки. Сайт это не просто прокси, на нем еще и авторизация посетителей, а еще у него есть доступ к внутренним сервисам, которые я бы очень не хотел публиковать в интернете. Ну и еще некоторые мелочи. То есть по сути, либо всю логику переносить на клиентский JS (с соответствующими изменениями REST-сервиса), либо использовать очередь сообщений. Либо не возвращать клиенту ответ, пока не будут получены данные. Так? MQ мне кажется перебором, наверное сделаю, чтобы клиент ждал. А чтобы ждать было не так скучно, видимо буду использовать полноэкранный фрейм (на основной странице скрипт-диспетчер, во фрейме ответ сервера), либо клиентский js будет целиком подменять body самого себя ответом сервера. Тогда можно будет показать клиенту сообщение "Ждите", пока не поступит ответ от сервера. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.02.2020, 08:06 |
|
Асинхронный режим на сервере
|
|||
---|---|---|---|
#18+
Alibek B. Либо не возвращать клиенту ответ, пока не будут получены данные. Так? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.02.2020, 09:00 |
|
Асинхронный режим на сервере
|
|||
---|---|---|---|
#18+
Ну на сайте сам веб-сервер прибьет поток через некоторое время, и клиент получит 504 от браузера, разве нет? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.02.2020, 09:04 |
|
Асинхронный режим на сервере
|
|||
---|---|---|---|
#18+
Затрудняюсь сказать. Может и 200 с набором пхпшных ошибок, если они включены. Или с пустотой. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.02.2020, 09:35 |
|
Асинхронный режим на сервере
|
|||
---|---|---|---|
#18+
Alibek B. может быть есть другие способы Либо продолжать костыли городить ... |
|||
:
Нравится:
Не нравится:
|
|||
20.02.2020, 01:12 |
|
Асинхронный режим на сервере
|
|||
---|---|---|---|
#18+
Alibek B. Ну на сайте сам веб-сервер прибьет поток через некоторое время, и клиент получит 504 от браузера, разве нет? В зависимости от настроек. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.02.2020, 12:33 |
|
Асинхронный режим на сервере
|
|||
---|---|---|---|
#18+
Изопропил Alibek B. может быть есть другие способы Либо продолжать костыли городить А причем тут пхп, если у него клиент на одной стороне, а задача на сервере. Любой язык возьми и там будут те же проблемы. Либо клиент будет "висеть на проводе" и ждать. Либо он будет обращаться периодически и спрашивать "ну что там?". Так же и задача, либо будет выполняться в процессе вебсервера и недалек тот час когда веб-сервер скажет новому пользователю "у меня нет для тебя ресурсов, тут какой-то вася 250 раз скрипт запустил", либо он нормальную очередь сделает и пулл обработчиков. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.02.2020, 12:35 |
|
|
start [/forum/topic.php?fid=23&msg=39928697&tid=1459758]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
40ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
53ms |
get tp. blocked users: |
2ms |
others: | 16ms |
total: | 158ms |
0 / 0 |