Lua打开套接字错误

时间:2018-03-27 11:00:55

标签: sockets http nginx lua openresty

我使用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

当我设置更多用户时,我有更多错误。这是什么意思?谢谢你的帮助。

2 个答案:

答案 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 上下文中使用它是可以的,因为阻塞不被认为是有害的。