API::Server::Redis выводит обработку парсером одиночных запросов на новый уровень:
Выполнение запросов:
Различные кейсы:
P.S:
- в качестве сервера запросов и результатов выступает Redis
- возможность запрашивать результаты асинхронно или в блокирующем режиме
- возможность подключить множество парсеров(как на одном так и на разных серверах) для обработки запросов с единой точкой входа
- возможность задасть количество потоков для обработки запросов и просматривать логи работы
- установить модуль async-redis
- запустить сервер redis, проверить настройки парсера API::Server::Redis
- добавить задание с парсером API::Server::Redis, в качестве запросов можно подать {num:1:N}, где N должно соответствовать числу потоков
Выполнение запросов:
- Каждый запрос состоит из массива [queryId, parser, preset, query, overrideOpts, apiOpts]
- parser, preset, query соответствует аналогичным для API запроса oneRequest(https://a-parser.com/wiki/user-api/#onerequest)
- queryId - формируется вместе с запросом, рекомендуем использовать порядковый номер из вашей базы или хороший рандом, по данному ID можно будет получить результат
- overrideOpts - переопределние настроек для парсера
- apiOpts - дополнительные параметры обработки API
Код:
127.0.0.1:6379> lpush aparser_redis_api '["some_unique_id", "Net::HTTP", "default", "https://ya.ru"]'
(integer) 1
127.0.0.1:6379> blpop aparser_redis_api:some_unique_id 0
1) "aparser_redis_api:some_unique_id"
2) "{\"data\":\"<!DOCTYPE html><html.....
Различные кейсы:
- асинхронная проверка наличия результата: lpop aparser_redis_api:some_unique_id
- блокирующее получение результата: blpop aparser_redis_api:some_unique_id 0, где 0 - таймаут операции
- сохранение результатов в единую очередь(LIST в терминах Redis):
Код:
127.0.0.1:6379> lpush aparser_redis_api '["some_unique_id", "Net::HTTP", "default", "https://ya.ru", {}, {"output_queue": "aparser_results"}]'
(integer) 1
127.0.0.1:6379> blpop aparser_results 0
1) "aparser_results"
2) "{\"queryId\":\"some_unique_id\",\"results\":{\"data\":\"<!DOCTYPE html><html class=...
P.S:
- Работа API поверх Redis имеет огромные преимущества в сравнении с HTTP API:
- Нулевые задержки
- Шардинг запросов на множество парсеров
- Таймауты операций
- Автоматический expire результатов
- Активно используем у себя в https://spyserp.com/