nepster-web
@nepster-web

Связь php и node.js, как оптимизировать или, может, переделать?

Ранее писал уже подобный вопрос, но все же никак не могу прийти к оптимальному решению.

Собственно ситуация:
Есть игра Деберц на 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?
  • Вопрос задан
  • 3350 просмотров
Решения вопроса 1
Я понял только, что редис это что-то типа базы данных ну или может хранилища типа ммкеша.
Вообще можно ли с помощью этой технологии реализовать реал тайм и взаимодействие с node.js ?

Если знаете что такое мемкэш, то это почти то же что и редис. Для Вашего примера с трудом представляю где он применим.
Куки каждый раз разные, поэтому успеть их подделать врядли можно за время хода (от 30 сек до 2 минут).

Подделать куки можно и за 1 сек.. Если не руками, то например пустить бота в вашу игру..

Не спец по ноде и риалтайму, но не пробовали все сделать на ноде и не задаваться подобными проблемами?
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы