Я хотел бы использовать OpenResty с Lua-интерпретатором.Открытые одновременные запросы
Я не могу заставить среду OpenResty обрабатывать два параллельных запроса на две отдельные конечные точки. Я симулировать, что один запрос делает некоторые жесткие расчеты, запустив в длинном цикле:
local function busyWaiting()
local self = coroutine.running()
local i = 1
while i < 9999999 do
i = i + 1
coroutine.yield(self)
end
end
local self = coroutine.running()
local thread = ngx.thread.spawn(busyWaiting)
while (coroutine.status(thread) ~= 'zombie') do
coroutine.yield(self)
end
ngx.say('test1!')
Другая конечная точка просто посылает ответ немедленно. ngx.say('test2')
Я отправляю запрос на первую конечную точку, а затем посылаю второй запрос ко второй конечной точке. Однако OpenResty заблокирован первым запросом, и поэтому я получаю оба ответа почти одновременно.
Установка параметра nginx worker_processes 1;
на большее число тоже не помогает, и я хотел бы иметь только один рабочий процесс.
Каким образом можно позволить OpenResty обрабатывать дополнительные запросы и не блокироваться первым запросом?
Вы не указали какой-либо код, показывающий нам, как вы отправляете подзапросы. Я предполагаю, что вы используете что-то вроде ngx.location.capture для отправки подзапросов в конечные точки. Вы должны использовать https://github.com/openresty/lua-nginx-module#ngxlocationcapture_multi API для параллельных подзапросов. –
Я не использую ngx.location.capture. Я использую два отдельных клиента для подключения к двум различным конечным точкам на одном сервере. – JeFf
@JeFi извините, не понял ваш случай использования, теперь понятно, см. Мой ответ ниже –