Jump to content

Рестарт ресурса и обновление БД


Recommended Posts

Всем привет!

Есть такой вопрос. Если при рестарте ресурса, в onResourceStop вызвать dbExec раз эдак за 100 (записать положения игроков), успеют ли выполнится запросы, если при остановке ресурса подключение будет уничтожено?

Link to comment

Всё выполняется в одном потоке. Если подключение разрывается раньше чем обновляются игроки, то логично, что вместо сохранения информации в БД ты получишь кучу ошибок.

Link to comment
Всё выполняется в одном потоке. Если подключение разрывается раньше чем обновляются игроки, то логично, что вместо сохранения информации в БД ты получишь кучу ошибок.

Это понятно. Но судя по работе dbExec, данная функция лишь отправляет запрос на БД. После чего, данный запрос либо выполняется, либо ждет своей очереди на выполнение. Т.е. получается, огромное кол-во запросов помешается в стек и в подключении уже нет надобности, поэтому уничтожается.

Пример, про что я спрашиваю:

addEventHandler("onResourceStop", resourceRoot, 
    function() 
        for _, player in ipairs(getElementsByType("player")) do 
            --dbExec(conneciton, ...) 
        end 
        destroyElement(conneciton) 
    end 
) 

Так как протестировать на огромном кол-ве игроков нет возможности, то спрашиваю, будет ли сбой? В теории, уничтожается лишь соединение, а запросы уже висят в стеке на обработку самой БД.

Link to comment
Всё выполняется в одном потоке. Если подключение разрывается раньше чем обновляются игроки, то логично, что вместо сохранения информации в БД ты получишь кучу ошибок.

Это понятно. Но судя по работе dbExec, данная функция лишь отправляет запрос на БД. После чего, данный запрос либо выполняется, либо ждет своей очереди на выполнение. Т.е. получается, огромное кол-во запросов помешается в стек и в подключении уже нет надобности, поэтому уничтожается.

Пример, про что я спрашиваю:

addEventHandler("onResourceStop", resourceRoot, 
    function() 
        for _, player in ipairs(getElementsByType("player")) do 
            --dbExec(conneciton, ...) 
        end 
        destroyElement(conneciton) 
    end 
) 

Так как протестировать на огромном кол-ве игроков нет возможности, то спрашиваю, будет ли сбой? В теории, уничтожается лишь соединение, а запросы уже висят в стеке на обработку самой БД.

А зачем тебе игроки ? Сделай цикл на 10000(ну или сколько там может быть) и записывай в БД что-нибудь рандомное.

Link to comment
Действительно, сделай самостоятельно исследование этого вопроса. И о результатах напиши. Это же намного интересней :)

Уже проверил. Все нормально обновляется. Все так, как я говорил, запросы отправляются в стек БД и оттуда выполняются, поэтому соединение можно легко прерывать и код выше будет работать.

Link to comment

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...