Node.JS сессия / кеш; это вещь? - PullRequest
0 голосов
/ 29 августа 2018

У меня есть бот, который я закодировал в node.js, и пользователи взаимодействуют с этим ботом. Вы можете говорить с ним и использовать команды, но все довольно хорошо. Нет постоянного хранилища данных (за исключением базы данных MySQL для отслеживания определенных вещей, таких как количество золота, которое человек получает, взаимодействуя с ботом)

1003 *

Я работал над созданием некоторых игр с ботом, с которыми пользователи могут играть на деньги. И игра, которую я написал, была игрой в блэкджек. (Простой 21 против бота)

1007 *

Пользователь получает две карты для начала и может либо ударить, либо остаться, и значения складываются. Однако сложная часть этого заключается в том, что одновременно может играть только один человек из-за конфликтующих вызовов функций. Поэтому мне было интересно, есть ли способ использовать node.js для временного хранения постоянных асинхронных данных.

Так что я мог бы написать что-то вроде:

function playBlackjack(userid, betamount){
    session_start();
    var unique_id = session['id'];
    { ... } //all the code for the various things like hitMe(), stay(), start(), endGame() etc...
    giveReward(session['id']); //for if they win/lose it'll get removed/added to their mysql user
    session_end(); //this cleanly ends the players session and if they were to run the blackjack command again it would start a fresh session, giving their userid a new session variable 
}

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

Как правило, я не хочу использовать файл JSON для этого, потому что я не хочу засорять сервер файлами JSON (конечно, я мог бы настроить их на автоматическое удаление через X времени, но если есть более элегантный решение, которое я хотел бы исследовать это)

1018 *

Далее я хочу попробовать написать мини-игру DND, в которой бот генерирует случайные сценарии (эти части уже выполнены), но мне нужны постоянные сеансы, чтобы, когда бот предлагал пользователю бросить кубик и ожидал его ответа, они введите !roll d20 и значение, полученное из списка, можно затем использовать в боте для развития истории. Интересно, что является самым чистым способом справиться с этим тоже. Я не думаю, что MySQL будет работать здесь, равно как и JSON-файл, если я не создам JSON-файл с именем пользователя, датой / временем, историей (другими данными, такими как золото, статистика и т. Д.), Чтобы история оставалась постоянной.

1023 *

Есть идеи? Если JSON-маршрут лучший, я предполагаю, что мне нужно будет создать файлы вроде:

DND_userid.json

BLACKJACK_userid.json

1031 *

, который будет иметь несколько массивов с session_ids

Полагаю, это будет выглядеть примерно так

{ 
    "user_id" : "mrsodasexy",
    "mode": "DND",
    "sessions": [
        {
            "id" : "845skjjd93jf94f", 
            "data": [
                {
                    "date_start" : "08/27/2018 15:11:11",
                    "date_end" : "08/27/2018 16:30:32",
                    "story" : " ... ", //as HTML string 
                    "last_sentence" : "you rested in the inn",
                    "stats" : [ ... ],
                    "inventory" : [ ... ]
                }
            ]
        },
        {
            "id" : "167sjd93j9woiwiw",
            "data": [
                {
                    "date_start" : "08/28/2018 16:14:16",
                    "date_end" : "",
                    "story" : " ... ", //as HTML string 
                    "last_sentence" : "and you found 20 pieces of gold",
                    "stats" : [ ... ],
                    "inventory" : [ ... ]
                }
            ]           
        }
    ]
}

А я бы просто посмотрел каждую сессию, где date_end пуст, и продолжил бы с этой сессии?

Это лучший способ сделать это?

1042 *

РЕДАКТИРОВАТЬ: Слово, которое я ищу, похоже на кеш

кеш сессии для игры. Я сохраню состояние после истечения времени в базе данных, но мне нужен постоянный кеш между session_start (); и session_end ();

потому что все, что я хочу, это состояние карточной игры, которую нужно сохранить ВО ВРЕМЯ карточной игры. Так что, если я раздал 7 карт, я могу сохранить его в массиве cards [] и для этого человека, и пока другой человек играет, у него есть свой собственный массив cards [], который заполняется значениями карт, поскольку они играют ТОЛЬКО в пределах их сессия. После завершения сеанса переменные карты уничтожаются. По сути, я хочу сохранить состояние игры в локальной памяти (RAM) или что-то в этом роде, используя что-то похожее на session_start в PHP

* * * Тысяча сорок-девять 1050 *
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...