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

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

Frapsy

Известный
Проверенный
393
227
Надоел этот краш с асинхронным запросом, может что-нибудь в либе можно подредачить? Исходники вроде имеются
В цикле ты не запустишь более одного асинхронного запроса на постоянке, в ином случае скрипт тебя пошлет(ибо там идет лажа по потокам, если я верно вдуплил). Как вариант - для одного цикла использовать асинхронный(на самые постоянные, чтобы не было видно мини-фризов), а на самый менее активный цикл - что-то иное. Я так в своем скрипте делал при работе с ВК, т.е. получение сообщений асинхронным в цикле, отправка сообщений уже иначе, так и живем. Ну, это если я правильно понял, как ты там у себя оформил это дело.
 
  • Нравится
Реакции: #Northn

Jason2222

Известный
180
3
Не могу понять с этими асинхронами http.

Хочу отправить post запрос в php, а тот должен обработать и записать в txt файл. Но моя криворукость, похоже, не позволяет достичь цели. Буду благодарен за помощь. Только учусь, поэтому высказывания "что за говнокод" не обязательны, и так знаю.

Lua:
function senddate()
    local _, myid = sampGetPlayerIdByCharHandle(playerPed)
    local nick = sampGetPlayerNickname(myid)
    async_http_request('POST', 'http://site.ru/log.php', {params = {pnick = nick, ptime = os.date()}} --[[аргументы, которые хочу отправить]],
    function(response)
        print(response.text)
    end,
    function(err)
        print(err)
    end)
    end

Часть кода php, записываю через подключение к ftp.
PHP:
    if (isset($_POST["pnick"])) {
        $remote_file = 'file.txt';
        $handle = fopen('file.txt', 'a+');
        ftp_fget($login, $handle, $remote_file, FTP_ASCII, 1);
        fwrite($handle, $_POST["nick"].": ".$_POST["ptime"]."\r\n");
        fclose($handle);
    }
 

ImPasha

Software Developer & System Administrator
Друг
1,788
2,142
Не могу понять с этими асинхронами http.

Хочу отправить post запрос в php, а тот должен обработать и записать в txt файл. Но моя криворукость, похоже, не позволяет достичь цели. Буду благодарен за помощь. Только учусь, поэтому высказывания "что за говнокод" не обязательны, и так знаю.

Lua:
function senddate()
    local _, myid = sampGetPlayerIdByCharHandle(playerPed)
    local nick = sampGetPlayerNickname(myid)
    async_http_request('POST', 'http://site.ru/log.php', {params = {pnick = nick, ptime = os.date()}} --[[аргументы, которые хочу отправить]],
    function(response)
        print(response.text)
    end,
    function(err)
        print(err)
    end)
    end

Часть кода php, записываю через подключение к ftp.
PHP:
    if (isset($_POST["pnick"])) {
        $remote_file = 'file.txt';
        $handle = fopen('file.txt', 'a+');
        ftp_fget($login, $handle, $remote_file, FTP_ASCII, 1);
        fwrite($handle, $_POST["nick"].": ".$_POST["ptime"]."\r\n");
        fclose($handle);
    }
Доходит ли запрос до сервера?
 

Frapsy

Известный
Проверенный
393
227
Не могу понять с этими асинхронами http.

Хочу отправить post запрос в php, а тот должен обработать и записать в txt файл. Но моя криворукость, похоже, не позволяет достичь цели. Буду благодарен за помощь. Только учусь, поэтому высказывания "что за говнокод" не обязательны, и так знаю.

Lua:
function senddate()
    local _, myid = sampGetPlayerIdByCharHandle(playerPed)
    local nick = sampGetPlayerNickname(myid)
    async_http_request('POST', 'http://site.ru/log.php', {params = {pnick = nick, ptime = os.date()}} --[[аргументы, которые хочу отправить]],
    function(response)
        print(response.text)
    end,
    function(err)
        print(err)
    end)
    end

Часть кода php, записываю через подключение к ftp.
PHP:
    if (isset($_POST["pnick"])) {
        $remote_file = 'file.txt';
        $handle = fopen('file.txt', 'a+');
        ftp_fget($login, $handle, $remote_file, FTP_ASCII, 1);
        fwrite($handle, $_POST["nick"].": ".$_POST["ptime"]."\r\n");
        fclose($handle);
    }
Чекни по ссылке в подписи в исходнике как сделаны асинхронные POST запросы, которые в действительности работают, ибо, на сколько я помню, метод, который используешь ты - не самый рабочий.
 
  • Нравится
Реакции: Jason2222

ImPasha

Software Developer & System Administrator
Друг
1,788
2,142
@FYP Понимаю, что использование Lanes противопоказано, но у меня есть вопрос по второй реализации, которая циклично повторяет запрос. Как можно остановить поток этот, выполняющий запросы? Я хочу перезапустить функцию с новыми данными, но для этого как раз нужна остановка первого потока.
 

FYP

Известный
Автор темы
Администратор
1,764
5,924
@FYP Понимаю, что использование Lanes противопоказано, но у меня есть вопрос по второй реализации, которая циклично повторяет запрос. Как можно остановить поток этот, выполняющий запросы? Я хочу перезапустить функцию с новыми данными, но для этого как раз нужна остановка первого потока.
тот факт, что ты продолжаешь его использовать говорит об обратном.
вторая реализация не повторяет запрос циклично, в ней циклично опрашивается очередь на отправку и циклично обрабатываются ответы. т.е. один вызов функции равен одной отправке запроса, и чтобы отправить запрос с другими данными нужно лишь вызвать функцию с другими аргументами. если она у тебя работает не так, значит это вызванно неопределённым поведением.
 

Di3

Участник
432
20
Что делать,при двух запросах подряд гташка вылетает спустя не большое время

Lua:
async_http_request("GET", 'Ссылка', nil,
function(response)
    resulturl = u8:decode(response.text)
end,
function(err)
print(err)
end)

async_http_request("GET", 'Ссылка2', nil,
function(response)
    resulturl2 = u8:decode(response.text)
end,
function(err)
print(err)
end)
while not resulturl and not resulturl2 do wait(0) end
--code
 

ImPasha

Software Developer & System Administrator
Друг
1,788
2,142
Что делать,при двух запросах подряд гташка вылетает спустя не большое время

Lua:
async_http_request("GET", 'Ссылка', nil,
function(response)
    resulturl = u8:decode(response.text)
end,
function(err)
print(err)
end)

async_http_request("GET", 'Ссылка2', nil,
function(response)
    resulturl2 = u8:decode(response.text)
end,
function(err)
print(err)
end)
while not resulturl and not resulturl2 do wait(0) end
--code
Прочитать шапку темы. Lanes использовать небезопасно. Если ты не забил весь скрипт им, то лучше переходи на effil.
 

Di3

Участник
432
20
Прочитать шапку темы. Lanes использовать небезопасно. Если ты не забил весь скрипт им, то лучше переходи на effil.
Почитал выше,FYP сказал,если я правильно понял, мол effil не рекомендуется для частого использования. А у меня будут постоянные запросы и.т.д

Прочитать шапку темы. Lanes использовать небезопасно. Если ты не забил весь скрипт им, то лучше переходи на effil.
на effil аналогично так же вылетает.
code
Lua:
function checkregiacc(ip1,ip2)
       lua_thread.create(function()
             local errorregi=false
              city2=nil
                country2=nil
                isp2=nil
                 city1=nil
                 country1=nil
                 isp1=nil
                 errorregi=nil
    asyncHttpRequest("GET", 'http://ip-api.com/json/'..ip1..'?lang=ru', nil,
    function(response)
        local regvrem = u8:decode(response.text)
     city1,country1,isp1 = regvrem:match('city%":%"(.*)%"%,%"country%":%"(.*)%"%,%"countryCode.*%"isp%":%"(.*)%"%,%"lat%"')
    end,
    function(err)
     print(err)
     sampAddChatMessage('[Ошибка] Не удалось загрузить информацию о REG IP', 0xFF0000)
      errorregi = true
    end)
    asyncHttpRequest("GET", 'http://ip-api.com/json/'..ip2..'?lang=ru', nil,
    function(response)
        local regvrem = u8:decode(response.text)
     city2,country2,isp2 = regvrem:match('city%":%"(.*)%"%,%"country%":%"(.*)%"%,%"countryCode.*%"isp%":%"(.*)%"%,%"lat%"')
    end,
    function(err)
     print(err)
           errorregi = true
     sampAddChatMessage('[Ошибка] Не удалось загрузить информацию о LAST IP', 0xFF0000)
    end)
while not city1 or not city2 or errorregi==true do wait(0) end
if city1 and city2 then
sampAddChatMessage(country1..'  '..country2, -1)
sampAddChatMessage(city1..'  '..city2, -1)
sampAddChatMessage(isp1..'  '..isp2, -1)
else
         sampAddChatMessage('[Ошибка] Не удалось загрузить информацию.', 0xFF0000)
end
end)
end
 
Последнее редактирование:

Frapsy

Известный
Проверенный
393
227
Вылетать будет до тех пор, пока не сделаешь для запросов или "порядок очереди" или не сменишь на/добавишь иной метод запросов. У тебя используется несколько запросов чуть ли не одновременно, но ответ приходит не моментально, а скрипт при этом начинает выполнять следующий запрос и из-за какой-то херомантии, которая не любит друг друга - скрипт крашит будь то сразу, через пару секунд или же минут.
 
  • Нравится
Реакции: Di3

Di3

Участник
432
20
Вылетать будет до тех пор, пока не сделаешь для запросов или "порядок очереди" или не сменишь на/добавишь иной метод запросов. У тебя используется несколько запросов чуть ли не одновременно, но ответ приходит не моментально, а скрипт при этом начинает выполнять следующий запрос и из-за какой-то херомантии, которая не любит друг друга - скрипт крашит будь то сразу, через пару секунд или же минут.
т.е если я изменю функцию запроса то все заработает?)

Вылетать будет до тех пор, пока не сделаешь для запросов или "порядок очереди" или не сменишь на/добавишь иной метод запросов. У тебя используется несколько запросов чуть ли не одновременно, но ответ приходит не моментально, а скрипт при этом начинает выполнять следующий запрос и из-за какой-то херомантии, которая не любит друг друга - скрипт крашит будь то сразу, через пару секунд или же минут.
Хз) Все равно крашит. Сделал ожидание пока не загрузится 1й запрос , второй не выполняется. Спустя время все равно вылет.
 
Статус
В этой теме нельзя размещать новые ответы.