Ранее писал уже подобный вопрос, но все же никак не могу прийти к оптимальному решению.
Собственно ситуация:
Есть игра Деберц на node.js, ну и собственно сайт на php (Yii).
Работает все следующим образом:
Пользователь создает заявку и ждет соперников. Это все в рамках сайта. Для реал тайма использую:
https://github.com/Yaffle/EventSource/Тут заметил 2 момента:
- данная библиотека не работает в опера мини.
- почему-то не понятно как у знакомой на пк вообще не в каком браузере не заработала (win7, все браузеры последних версий).
Когда пользователь создает или присоединяется к заявке, он получает соответствующие куки (хеш игры : хеш юзер айди). Далее когда все соперники подключились к заявке, создатель заявки жмет кнопку играть. Его перекидывает на страницу проверки, там я делаю все необходимые проверки на кол-во участников, могут ли они играть и др, заношу соответствующие данные в базу и с помощью библиотеки
elephant.io на нужный мне порт шлю данные о такой-то игре в node.js.
Далее создатель заявки улетает в игру по адресу site:ru/play/deberc/, а все остальные за счет реалтайма улетают за ним. (В момент всех проверок я меняю статус заявки с ожидания на игру), и js ожидающего получает статус 1 и делает редирект (locahion.href).
Теперь node.js на основании кук выдает карты соперникам. Куки каждый раз разные, поэтому успеть их подделать врядли можно за время хода (от 30 сек до 2 минут). Когда пользователи отыграли игру, node.js делать GET запрос к php, передавая ему данные об окончании игры (кто победил, кто проиграл и тп.). PHP делает все нужные манипуляции, записывает в базу и меняет статус игры на закрытую.
Значит, почему было принято решение с куками, ситуация, когда пользователь открывает 2 окно или случайно закрывает браузер и открывает его по-новой, то он может попасть обратно в свою игру.
Значит, какие проблемы и вопросы возникли:
- я слышал что-то про редис паб/саб, но так и не понял, что это такое, хорошей статьи на русском я не нашел ну или не до конца понял вообще что это такое и зачем это и как работает. Я понял только, что редис это что-то типа базы данных ну или может хранилища типа ммкеша.
Вообще можно ли с помощью этой технологии реализовать реал тайм и взаимодействие с node.js ?
- еще такой момент, если node.js падает и где-то возникает ошибка ну или просто-то по какой-то причине она не передала данные в php, то php не меняет статус игры, а это значит, что все игроки текущей заявки застряли на странице site.ru/play/deberc, так как я делаю редирект всех страниц сайта в игру. Что можно тут делать ?
- Я настроил php.ini так, что если пользователь неактивен более 30 минут, то сессию рвем. И тут ситуация, если игра идет более 30 минут, то пользователь теряет сессию и в общем бред получается.
Подскажите, пожалуйста, куда мне нужно покопать, чтобы хорошо проработать мою ситуацию со связью php и node.js?