Ошибка открытия сокета Lua

Я использую 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 (например), я ловлю эту ошибку:

27.03.2018 09:36:38 [информация] 10#10: *91018 shutdown() не удалось (107: сокет не подключен), клиент: 172.18.0.7, сервер: localhost

У меня больше ошибок, когда я устанавливаю больше пользователей. Что это значит? Спасибо вам за помощь.


person vedmed    schedule 27.03.2018    source источник


Ответы (2)


Не используйте библиотеку luasocket с OpenResty. Полученный код будет блокироваться на http.request().

Я предполагаю, что весь рабочий процесс nginx просто заблокирован, и это является причиной этих ошибок.

Для ваших целей вы можете использовать одну из библиотек ниже:

Первый более гибкий, позволяет использовать защищенный транспорт. Второй имеет более простой API.

И оба используют внутренний API-интерфейс nginx Lua cosocket и на 100% неблокируются из коробки.

person Alexander Altshuler    schedule 28.03.2018

lua-resty-http или lua-resty-http-simple не работают в контексте init_by_lua в http. его можно использовать в контексте инициализации, когда блокировка не считается вредной.

person Kshitij Joshi    schedule 04.05.2021