NGINX LUA 는 다운로드 하면 서 파일 내용 을 보 냅 니 다.
curl. so 동적 라 이브 러 리 에 사용 합 니 다.
package.path = '/usr/local/share/lua/5.1/?.lua;/usr/local/openresty/lualib/resty/?.lua;'
package.cpath = '/usr/local/lib/lua/5.1/?.so;'
require("curl")
function build_w_cb(f)
return function(s,len)
ngx.print(s)
ngx.flush(true)
--local wlen = f:write(s)
--if (wlen ~= len) then
-- return len,"writeError"
-- else
return len,nil
-- end
end
end
file = io.open("/usr/local/openresty/nginx/html/me.ts", "w")
if (file == nil) then
ngx.say ("Create File error")
return
end
ngx.header["Transfer-Encoding"] = 'chunked';
--Transfer-Encoding: chunked
--download XML File
xmlURL = "http://192.168.1.102/pxx/f1.ts"
c = curl.easy_init()
c:setopt(curl.OPT_URL, xmlURL)
c:setopt(curl.OPT_WRITEFUNCTION, build_w_cb(file))
c:setopt(curl.OPT_FOLLOWLOCATION, 1)
c:setopt(curl.OPT_USERAGENT, "ContentPreload-agent/1.0")
c:setopt(curl.OPT_COOKIEFILE, "./curlpost.cookie")
c:setopt(curl.OPT_CONNECTTIMEOUT, 5)
c:setopt(curl.OPT_TIMEOUT, 3000)
c:setopt(curl.OPT_NOSIGNAL, 1)
ret,strerr = c:perform()
file:close()
이 예 는 실 행 될 수 있 지만 좀 정상 적 이지 않 은 것 은 파일 다운로드 과정 에서 ngx. print 를 호출 하지만 화해시키다 ngx. flush, 그러나 nginx 는 내용 을 모두 메모리 에 쌓 고 파일 이 끝 난 후에 야 클 라 이언 트 에 게 보 낼 수 있 습 니 다.
이 점 이 답답 합 니 다. 이 유 는 다운로드 와 전송 이 같은 스 레 드 이기 때 문 입 니 다. curl 의 perform 함수 가 실 행 된 후에 야 진정 으로 보 낼 수 있 습 니 다. perform 함수 가 실 행 된 과정 에서 print 함 수 를 호출 했 지만 이 함 수 는 내용 을 메모리 에 넣 었 을 뿐 send 함 수 를 진정 으로 실행 할 수 없 기 때문에 데이터 가 메모리 에 쌓 입 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.