OpenResty를 루아 인터프리터와 함께 사용하고 싶습니다.Openresty 동시 요청
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 유감스러운, 유스 케이스를 이해하지 못했습니다, 지금은 분명 내 대답을 참조하십시오 –