Зависание при отправке запроса

yoshimurа

Новичок
Автор темы
7
1
Версия MoonLoader
.026-beta
Я абсолютный, прям полный ноль (реально) в кодинге, только начинаю вкатываться, нейронкой попросил сделать дебаг отправку запрос на api дабы спарсить (извините если что то не так, я реально тупой, не подкован тут увы) инфорацию и посмотреть задержку, проверил вот этим:
deb:
-- test_bigdata_debug.lua
-- Скрипт для замера времени загрузки и парсинга большого JSON
local requests = require("requests")
local cjson = require("cjson")
local encoding = require("encoding")
encoding.default = "CP1251"
local u8 = encoding.UTF8

function main()
    while not isSampLoaded() or not isSampAvailable() do
        wait(0)
    end

    sampRegisterChatCommand("testbig", function()
        sampAddChatMessage("[DEBUG] Запуск теста с большими данными...", -1)

        lua_thread.create(function()
            local total_start = os.clock()
            local step_time

            -- Шаг 1: начало запроса
            step_time = os.clock()
            print("[DEBUG][" .. string.format("%.3f", step_time - total_start) .. "] Начало запроса")
            sampAddChatMessage("[DEBUG] Отправляю запрос к API", -1)

            local url = "YOUR_API_URL_HERE"  -- замените на реальный URL
            local ok, resp = pcall(requests.get, url, { timeout = 30 })

            -- Шаг 2: ответ получен
            step_time = os.clock()
            print("[DEBUG][" .. string.format("%.3f", step_time - total_start) .. "] Ответ получен")
            sampAddChatMessage("[DEBUG] Ответ получен", -1)

            if not ok or resp.status_code ~= 200 then
                sampAddChatMessage("[DEBUG] Ошибка загрузки: " .. tostring(ok and resp.status_code or "таймаут"), -1)
                return
            end

            local data_len = #resp.text
            print("[DEBUG] Длина данных: " .. tostring(data_len) .. " байт")
            sampAddChatMessage("[DEBUG] Длина данных: " .. tostring(data_len) .. " байт", -1)

            -- Шаг 3: начало парсинга JSON
            step_time = os.clock()
            print("[DEBUG][" .. string.format("%.3f", step_time - total_start) .. "] Начало парсинга JSON")
            sampAddChatMessage("[DEBUG] Начинаю парсинг JSON...", -1)

            local parse_start = os.clock()
            local ok, data = pcall(cjson.decode, resp.text)

            -- Шаг 4: парсинг завершён
            step_time = os.clock()
            local parse_time = step_time - parse_start
            print("[DEBUG][" .. string.format("%.3f", step_time - total_start) .. "] Парсинг завершён за " .. string.format("%.3f", parse_time) .. " сек")
            sampAddChatMessage("[DEBUG] Парсинг завершён за " .. string.format("%.3f", parse_time) .. " сек", -1)

            if not ok then
                sampAddChatMessage("[DEBUG] Ошибка парсинга JSON", -1)
                return
            end

            if type(data) ~= "table" then
                sampAddChatMessage("[DEBUG] Получен не табличный тип: " .. type(data), -1)
                return
            end

            print("[DEBUG] Количество записей: " .. tostring(#data))
            sampAddChatMessage("[DEBUG] Количество записей: " .. tostring(#data), -1)

            local total_time = os.clock() - total_start
            print("[DEBUG] Общее время: " .. string.format("%.3f", total_time) .. " сек")
            sampAddChatMessage("[DEBUG] Общее время: " .. string.format("%.3f", total_time) .. " сек", -1)

            if #data > 0 then
                local first = data[1]
                local msg = string.format("Пример: UID=%s, владелец=%s", tostring(first.LavkaUid), tostring(first.username))
                sampAddChatMessage("[DEBUG] " .. msg, -1)
            end
        end)

        sampAddChatMessage("[DEBUG] Поток запущен, ожидайте...", -1)
    end)

    print("[DEBUG] Скрипт загружен. Введите /testbig в игре.")
    while true do wait(0) end
end


Во время отравки /testbig, как только нажал на Enter сразу игра зависал на секунды 2 и выдала вот это:
deb:
[03:02:01.482905] (script)    test_https.lua: [DEBUG] Скрипт загружен. Введите /testbig в игре.
[03:02:09.967663] (script)    test_https.lua: [DEBUG][0.000] Начало запроса
[03:02:11.437218] (script)    test_https.lua: [DEBUG][1.470] Ответ получен
[03:02:11.438220] (script)    test_https.lua: [DEBUG] Длина данных: 2207454 байт
[03:02:11.438220] (script)    test_https.lua: [DEBUG][1.471] Начало парсинга JSON
[03:02:11.511463] (script)    test_https.lua: [DEBUG][1.545] Парсинг завершён за 0.074 сек
[03:02:11.512467] (script)    test_https.lua: [DEBUG] Количество записей: 3382
[03:02:11.512467] (script)    test_https.lua: [DEBUG] Общее время: 1.545 сек

И хотелось бы понять, как избавится от зависания на 2 секунды и что лучше всего использовать?
 

yoshimurа

Новичок
Автор темы
7
1

tripple sixx

Активный
114
52
 
  • Нравится
Реакции: yoshimurа