Lua 打开套接字错误

Lua open socket error

我正在使用 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() failed (107: Socket not connected), client: 172.18.0.7, server: localhost

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

不要将 luasocket 库与 OpenResty 一起使用。生成的代码将在 http.request().

上阻塞

我想所有的 nginx worker 都阻塞了,这就是这些错误的原因。

为了您的目的,您可以使用以下库之一:

首先更灵活,允许使用安全传输。 第二个更简单 API.

并且都在内部使用 nginx Lua cosocket API 并且 100% 非阻塞开箱即用。

lua-resty-http 或 lua-resty-http-simple 在 http 上下文中的 init_by_lua 中不起作用。 可以在阻塞不被认为有害的 init 上下文中使用它。