Исходник Гайд Асинхронные HTTP запросы в MoonLoader

Статус
В этой теме нельзя размещать новые ответы.

cover

Известный
Проверенный
245
268
@Frapsy если я правильно понимаю работу Effil из документации по ней, я не стал бы рекомендовать реализацию cover-а для частого выполнения запросов, т.к. тут библиотека requests (и другие загружаемые ею) загружается при каждом вызове и выгружается при завершении запроса - это плохо сказывается на производительности и может вызвать проблемы, как, например, описанную тобой
Если производить постоянный вызов(без задержки) в одном потоке - все ок (За 10 минут). Если создавать несколько потоков с постоянным вызовом, скрипт крашит.
 

tommy0203

Известный
2
0
Попробовал Effil. С чем может быть связано отсутствие кода ответа? Скрипт видит, что ответ пришел, выполняет fucntion (response), но при этом сам response - пустой, пробовал даже с примером cover'a.
 

cover

Известный
Проверенный
245
268
Попробовал Effil. С чем может быть связано отсутствие кода ответа? Скрипт видит, что ответ пришел, выполняет fucntion (response), но при этом сам response - пустой, пробовал даже с примером cover'a.
response.text

@Frapsy если я правильно понимаю работу Effil из документации по ней, я не стал бы рекомендовать реализацию cover-а для частого выполнения запросов, т.к. тут библиотека requests (и другие загружаемые ею) загружается при каждом вызове и выгружается при завершении запроса - это плохо сказывается на производительности и может вызвать проблемы, как, например, описанную тобой
Написал разработчику effil по вопросу перезапуска завершенного потока:

Безымянfdhfshfdный.png
 
Последнее редактирование модератором:
  • Нравится
Реакции: tommy0203

ImPasha

Software Developer & System Administrator
Друг
1,788
2,141
Попытка №2. Спасибо FYP за компиляцию библиотеки.

Собственно, протестировал effil. Вроде как, все работает, но на "длинных расстояниях" тесты не проводились.

Пример вызова:

Lua:
-- С функциями обработки ответа и ошибок.
asyncHttpRequest('GET', 'https://www.google.com/robots.txt', nil --[[Аргументы запроса]],
         function(response)
            --
         end,
         function(err)
            --
         end)

-- Без функций обработки ответа и ошибок. Можно добавить как функцию обработки ответа так и функцию обработки ошибок, но можно обойтись и без них, как показано в примере ниже.
asyncHttpRequest('GET', 'https://www.google.com/robots.txt', nil --[[Аргументы запроса]], nil --[[Функция обработки ответа]], nil --[[Функция обработки ошибок]])

Lua:
local effil = require 'effil' -- В начало скрипта

function asyncHttpRequest(method, url, args, resolve, reject)
   local request_thread = effil.thread(function (method, url, args)
      local requests = require 'requests'
      local result, response = pcall(requests.request, method, url, args)
      if result then
         response.json, response.xml = nil, nil
         return true, response
      else
         return false, response
      end
   end)(method, url, args)
   -- Если запрос без функций обработки ответа и ошибок.
   if not resolve then resolve = function() end end
   if not reject then reject = function() end end
   -- Проверка выполнения потока
   lua_thread.create(function()
      local runner = request_thread
      while true do
         local status, err = runner:status()
         if not err then
            if status == 'completed' then
               local result, response = runner:get()
               if result then
                  resolve(response)
               else
                  reject(response)
               end
               return
            elseif status == 'canceled' then
               return reject(status)
            end
         else
            return reject(err)
         end
         wait(0)
      end
   end)
end

Установка: содержимое архива разархивировать в папку lib
Есть пример с цикличным запросом? Как у фипа на lanes в первом посте.
 

cover

Известный
Проверенный
245
268
А он разве не болеет такой же болезнью, что и Lanes? Просто я боюсь, что опять начнут появляться ошибки, лишенные смысла.
Не болеет. У меня появлялись краши скрипта при использовании постоянных запросов с нескольких скриптовых потоков. А так, все отлично работает.
 

ImPasha

Software Developer & System Administrator
Друг
1,788
2,141
Попытка №2. Спасибо FYP за компиляцию библиотеки.

Собственно, протестировал effil. Вроде как, все работает, но на "длинных расстояниях" тесты не проводились.

Пример вызова:

Lua:
-- С функциями обработки ответа и ошибок.
asyncHttpRequest('GET', 'https://www.google.com/robots.txt', nil --[[Аргументы запроса]],
         function(response)
            --
         end,
         function(err)
            --
         end)

-- Без функций обработки ответа и ошибок. Можно добавить как функцию обработки ответа так и функцию обработки ошибок, но можно обойтись и без них, как показано в примере ниже.
asyncHttpRequest('GET', 'https://www.google.com/robots.txt', nil --[[Аргументы запроса]], nil --[[Функция обработки ответа]], nil --[[Функция обработки ошибок]])

Lua:
local effil = require 'effil' -- В начало скрипта

function asyncHttpRequest(method, url, args, resolve, reject)
   local request_thread = effil.thread(function (method, url, args)
      local requests = require 'requests'
      local result, response = pcall(requests.request, method, url, args)
      if result then
         response.json, response.xml = nil, nil
         return true, response
      else
         return false, response
      end
   end)(method, url, args)
   -- Если запрос без функций обработки ответа и ошибок.
   if not resolve then resolve = function() end end
   if not reject then reject = function() end end
   -- Проверка выполнения потока
   lua_thread.create(function()
      local runner = request_thread
      while true do
         local status, err = runner:status()
         if not err then
            if status == 'completed' then
               local result, response = runner:get()
               if result then
                  resolve(response)
               else
                  reject(response)
               end
               return
            elseif status == 'canceled' then
               return reject(status)
            end
         else
            return reject(err)
         end
         wait(0)
      end
   end)
end

Установка: содержимое архива разархивировать в папку lib
Как правильно передавать аргументы? Использую способ, который FYP давал для Lanes, но ничего не работает.
 

CatKnight

Известный
148
55
Попытка №2. Спасибо FYP за компиляцию библиотеки.

Собственно, протестировал effil. Вроде как, все работает, но на "длинных расстояниях" тесты не проводились.

Пример вызова:

Lua:
-- С функциями обработки ответа и ошибок.
asyncHttpRequest('GET', 'https://www.google.com/robots.txt', nil --[[Аргументы запроса]],
         function(response)
            --
         end,
         function(err)
            --
         end)

-- Без функций обработки ответа и ошибок. Можно добавить как функцию обработки ответа так и функцию обработки ошибок, но можно обойтись и без них, как показано в примере ниже.
asyncHttpRequest('GET', 'https://www.google.com/robots.txt', nil --[[Аргументы запроса]], nil --[[Функция обработки ответа]], nil --[[Функция обработки ошибок]])

Lua:
local effil = require 'effil' -- В начало скрипта

function asyncHttpRequest(method, url, args, resolve, reject)
   local request_thread = effil.thread(function (method, url, args)
      local requests = require 'requests'
      local result, response = pcall(requests.request, method, url, args)
      if result then
         response.json, response.xml = nil, nil
         return true, response
      else
         return false, response
      end
   end)(method, url, args)
   -- Если запрос без функций обработки ответа и ошибок.
   if not resolve then resolve = function() end end
   if not reject then reject = function() end end
   -- Проверка выполнения потока
   lua_thread.create(function()
      local runner = request_thread
      while true do
         local status, err = runner:status()
         if not err then
            if status == 'completed' then
               local result, response = runner:get()
               if result then
                  resolve(response)
               else
                  reject(response)
               end
               return
            elseif status == 'canceled' then
               return reject(status)
            end
         else
            return reject(err)
         end
         wait(0)
      end
   end)
end

Установка: содержимое архива разархивировать в папку lib
 

#Northn

Pears Project — уже запущен!
Всефорумный модератор
2,652
2,535
Надоел этот краш с асинхронным запросом, может что-нибудь в либе можно подредачить? Исходники вроде имеются
upload_2018-12-13_22-30-24.png
 

cover

Известный
Проверенный
245
268
Надоел этот краш с асинхронным запросом, может что-нибудь в либе можно подредачить? Исходники вроде имеютсяПосмотреть вложение 22569
@Frapsy если я правильно понимаю работу Effil из документации по ней, я не стал бы рекомендовать реализацию cover-а для частого выполнения запросов, т.к. тут библиотека requests (и другие загружаемые ею) загружается при каждом вызове и выгружается при завершении запроса - это плохо сказывается на производительности и может вызвать проблемы, как, например, описанную тобой
А реализовать функцию для частых запросов с effil невозможно, т.к. поток при каждом вызове функции, effil создает новый поток.
 
Статус
В этой теме нельзя размещать новые ответы.