我使用lua作为nginx(openresty)的模块来从远程主机获取文件。我的功能:
function readfile(url)
local http = require ("socket.http")
if not http then
error("Couldn't open socket.http")
end
http.TIMEOUT = 5
local body, code = http.request(url)
if not body then
error("Couldn't read the remote file: " .. code)
end
return body
end
我已经使用Siege测试了这段代码。当我将用户设置为100(例如)时,我发现了这个错误:
2018/03/27 09:36:38 [info] 10#10:* 91018 shutdown()失败(107:套接字未连接),客户端:172.18.0.7,服务器:localhost
当我设置更多用户时,我有更多错误。这是什么意思?谢谢你的帮助。
答案 0 :(得分:1)
不要在OpenResty中使用luasocket库。生成的代码将在http.request()
上阻止。
我认为所有nginx工作者都被阻止了,这就是这些错误的原因。
为了您的目的,您可以使用以下库之一:
首先是更灵活,允许使用安全传输。 第二个有更简单的API。
两者都在内部使用nginx Lua cosocket API并且开箱即用是100%无阻塞。
答案 1 :(得分:0)
lua-resty-http 或 lua-resty-http-simple 在 http 上下文中的 init_by_lua 中不起作用。 在 init 上下文中使用它是可以的,因为阻塞不被认为是有害的。