http запросы

Tema05

Известный
Автор темы
1,471
435
Версия MoonLoader
.026-beta
У меня скрипт почти полностью состоит из запросов к серверу и они постоянно отправляются lua скриптом. Использую реализацию socket + copas https://www.blast.hk/threads/20532/ я столкнулся с проблемой что 1 запрос может отправиться на сервер не дожидаясь окончания другого и из-за этого одноразовый токен повторяется что приводит к ошибкам. Как это исправить учитывая то что запросы могут быть отправлены в любой момент из любой части кода и в разных потоках?
 
U

user390868

Гость
У меня скрипт почти полностью состоит из запросов к серверу и они постоянно отправляются lua скриптом. Использую реализацию socket + copas https://www.blast.hk/threads/20532/ я столкнулся с проблемой что 1 запрос может отправиться на сервер не дожидаясь окончания другого и из-за этого одноразовый токен повторяется что приводит к ошибкам. Как это исправить учитывая то что запросы могут быть отправлены в любой момент из любой части кода и в разных потоках?
ты вообще видел последнее сообщение в теме, которую ты скинул и что там написал @FYP ? Вот и сам думай. Решение, которым ты пользуешься неактуальное мягко говоря. Кто пользуется подобным либо знают больше, либо не очень умны
 

FYP

Известный
Администратор
1,763
5,913
ты вообще видел последнее сообщение в теме, которую ты скинул и что там написал @FYP ? Вот и сам думай. Решение, которым ты пользуешься неактуальное мягко говоря. Кто пользуется подобным либо знают больше, либо не очень умны
в том сообщении сказано о неактуальности решения с lanes. решение с copas как раз является актуальным и стабильным.
Как это исправить учитывая то что запросы могут быть отправлены в любой момент из любой части кода и в разных потоках?
для этого нужно сделать что-то вроде мьютекса, который будет блокироваться при отправке и разблокироваться при получении ответа/ошибки.
 
  • Клоун
  • Нравится
Реакции: Fott и Tema05
U

user390868

Гость
в том сообщении сказано о неактуальности решения с lanes. решение с copas как раз является актуальным и стабильным.
значит я не прав и не до конца посмотрел всю тему. спасибо за объяснение
 

Tema05

Известный
Автор темы
1,471
435
в том сообщении сказано о неактуальности решения с lanes. решение с copas как раз является актуальным и стабильным.

для этого нужно сделать что-то вроде мьютекса, который будет блокироваться при отправке и разблокироваться при получении ответа/ошибки.
По поводу copas в твоей теме он не самой новой версии и я с ним также страдал некоторое время. Потом погуглил и нашёл новую версию copas где идёт ещё 2 дополнительных файла и вот с ней всё работает идиально.

По поводу блокировки я пока что сделал так: для каждого запроса создаю поток с циклом в котором жду пока copas.running будет false. Сомневаюсь что это хорошее решение но по логике на 1 время пойдёт.
 
Последнее редактирование:
  • Нравится
Реакции: leekyrave

Tema05

Известный
Автор темы
1,471
435
в том сообщении сказано о неактуальности решения с lanes. решение с copas как раз является актуальным и стабильным.

для этого нужно сделать что-то вроде мьютекса, который будет блокироваться при отправке и разблокироваться при получении ответа/ошибки.
@FYP При попытке использовать функцию для http запроса внутри только что созданного потока скрипт через пару запросов крашится. Я отправляю запрос по нажатию на элемент локального диалога.
Lua:
--Не крашит вообще
httpRequest('url', nil, function(response, code, _, _)
    if response then
        print(response)
    else
        print(code)
    end
end)

--Крашит на 3-4 запросе
lua_thread.create(function()
    httpRequest('url', nil, function(response, code, _, _)
        if response then
            print(response)
        else
            print(code)
        end
    end)
end)
 

kizn

\ 0 _ 0 /
Всефорумный модератор
2,408
2,090
@FYP При попытке использовать функцию для http запроса внутри только что созданного потока скрипт через пару запросов крашится. Я отправляю запрос по нажатию на элемент локального диалога.
Lua:
--Не крашит вообще
httpRequest('url', nil, function(response, code, _, _)
    if response then
        print(response)
    else
        print(code)
    end
end)

--Крашит на 3-4 запросе
lua_thread.create(function()
    httpRequest('url', nil, function(response, code, _, _)
        if response then
            print(response)
        else
            print(code)
        end
    end)
end)
Lua:
httpRequest('url', nil, somefunc)

function somefunc(response, code, _, _)
    lua_thread.create(function()
        if response then
            print(response)
        else
            print(code)
        end
    end)
end
а так?
 
  • Влюблен
Реакции: danywa

FYP

Известный
Администратор
1,763
5,913
По поводу copas в твоей теме он не самой новой версии и я с ним также страдал некоторое время. Потом погуглил и нашёл новую версию copas где идёт ещё 2 дополнительных файла и вот с ней всё работает идиально.
в моей теме модифицированный copas, я добавлял в него поддержку таймаутов и что-то фиксил, об официальных обновлениях copas мне известно, но чтоб указать на него в своей теме надо протестить самому.
По поводу блокировки я пока что сделал так: для каждого запроса создаю поток с циклом в котором жду пока copas.running будет false. Сомневаюсь что это хорошее решение но по логике на 1 время пойдёт.
годится.
@FYP При попытке использовать функцию для http запроса внутри только что созданного потока скрипт через пару запросов крашится. Я отправляю запрос по нажатию на элемент локального диалога.
с какой ошибкой?
 
  • Клоун
Реакции: Fott

Tema05

Известный
Автор темы
1,471
435
Lua:
httpRequest('url', nil, somefunc)

function somefunc(response, code, _, _)
    lua_thread.create(function()
        if response then
            print(response)
        else
            print(code)
        end
    end)
end
а так?
Так проблема в том что нужно задержать запрос на сервер а не ответ.