Какова логика работы реалтайм приложения?

Я делаю свой проектик, учусь, никого не трогаю и тут ни с того ни с сего мне понадобился реалтайм. Я перекопал кучу доков по этой теме, нашел 100500 споров по теме, в общем, у меня есть куча информации, из которой я не могу понять, что лучше и как мне это нужно использовать.

Прежде всего я наткнулся на вот эту статью habrahabr.ru/post/162301/, где автор рассказывает про свой сайт и страницу, которую постоянно нужно обновлять. Мне нужно то же самое, только на примере других игровых столов. К примеру, у нас есть игра в дурака, пользователи создают заявки или присоединяются к ним. Также нужно постоянно обновлять страницу и показывать содержимое.

Для себя я уже выбрал следующие инструменты: php, node.js, sockjs, redis.

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

Вопрос 1. Правильно ли я понял как построить архитектуру этого дела ?:
client - получает данные и рендерит страницу

<script src="http://cdn.sockjs.org/sockjs-0.3.min.js"></script>

<script type="text/javascript">

    var sock = new SockJS('http://127.0.0.1:9999/echo');
    
    sock.onopen = function() {
       console.log('open');
    };
    
    
    sock.onmessage = function(e) {
       
       var data = JSON.parse(e.data);
       
       console.log(data)
       // Парсим
       
    };
        
    sock.onclose = function() {
       console.log('close');
    };

</script>


node.js сервер, получает данные из redis и отправляет на клиент
var http   = require('http');
var sockjs = require('sockjs');
var redis  = require('redis');
var client = redis.createClient();

client.subscribe("chan-1");

var echo = sockjs.createServer();


echo.on('connection', function(conn) {
    
    /*setInterval(function(){
          

    }, 1000);*/

    
    
    client.on('message', function(channel, message) {

        console.log(channel);
        console.log(message);
        console.log('---------------');
        
        conn.write(message);
        
    });
    
    
    conn.on('close', function() {});
});




var server = http.createServer();
echo.installHandlers(server, {prefix:'/echo'});
server.listen(9999, '0.0.0.0');


И собственно самое главное, php который работает с данным и кидает их в канал:
$redis = new Redis();
$redis->pconnect('localhost', 6379);
$redis->publish("chan-1", json_encode(['test'=>'test']));


Вопрос 2 как правильно оперировать данными в php ?:

К примеру пользователь создает заявку на игру, как я понял необходимо послать данные новой заявки в канал ?

$redis->publish("chan-1", json_encode(['newGame'=>$data]));


Так-же если к примеру пользователь присоединился к заявке, необходимо послать данные для обновления страницы:
$redis->publish("chan-1", json_encode(['updateGame'=>$data]));


Ну и если игра стартовала, нужно убрать заявку:
$redis->publish("chan-1", json_encode(['endGame'=>$id]));


Получается, как я понял, при каждом таком действии пользователей нужно слать данные в канал. Правильно ли это?

Вопрос 3 Как правильно рендерить страницу?:
Страница из себя представляет таблицу, которая будет постоянно меняться (новые заявки будут появляться, старые исчезать а также данные в заявках могут изменяться, например добавляться игроки). Нужно перерисовывать каждый раз таблицу с 0 или же работать с конкретными ее частями? Как вообще в таком случае происходят расходы памяти?
  • Вопрос задан
  • 3120 просмотров
Пригласить эксперта
Ответы на вопрос 1
И мой вопрос номер 1 - зачем php если есть nodejs?
Ответ написан
Ваш ответ на вопрос

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

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