Imperial777
@Imperial777
веб-юниор

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

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

Имеется: бэкэнд на php, проект - небольшая браузерная игра. Есть функционал, для которого нужен реалтайм - чаты, личные сообщения, уведомления пользователей, раз игра, соответственно всякие обновлялки здоровья, маны, пошаговые бои и т.д.

Задача - как получше реализовать реалтайм. Раньше на проекте использовалась библиотека dklab_realplexor, но в 2019 она уже морально (и технически) устарела. Думала насчёт связки nodejs + socket.io, но как посылать данные из PHP в ноду? Переписывать бэкэнд на ноду не вариант, уже довольно много кода написано.
  • Вопрос задан
  • 427 просмотров
Решения вопроса 1
bootd
@bootd
Гугли и ты откроешь врата знаний!
Какие технологии использовать для реалтайма?
nodejs + socket.io хороший выбор, но сокеты и на php написать можно))) Зачем тут нода, раз весь бекенд на php? Поднял свой сокет сервер на php и всё, общайся с фронтом, обновляй и принимай данные.

Если всё же добавить ноду, то:
но как посылать данные из PHP в ноду?

Точно так же, как и все запросы, слать данные на определённый адрес.

Сделаете у ноды апишку с нужным адресом и пускай php шлёт на этот адрес данные, вроде де же всё просто, не?
Типа localhost:3000/api/data - на такой адрес php будет слать данные в ноду, а нода уже всё обработает и что-то сделает
Ответ написан
Пригласить эксперта
Ответы на вопрос 4
deepblack
@deepblack
https://github.com/walkor/Workerman

An asynchronous event driven PHP framework for easily building fast, scalable network applications. Supports HTTP, Websocket, SSL and other custom protocols. Supports libevent, HHVM, ReactPHP.


spoiler

<?php
use Workerman\Worker;
require_once './Workerman/Autoloader.php';

// Create A Worker and Listens 2346 port, use Websocket protocol
$ws_worker = new Worker("websocket://0.0.0.0:2346");

// 4 processes
$ws_worker->count = 4;

// Emitted when new connection come
$ws_worker->onConnect = function($connection)
{
    // Emitted when websocket handshake done
    $connection->onWebSocketConnect = function($connection)
    {
        echo "New connection\n";
    };
};

// Emitted when data is received
$ws_worker->onMessage = function($connection, $data)
{
    // Send hello $data
    $connection->send('hello ' . $data);
};

// Emitted when connection closed
$ws_worker->onClose = function($connection)
{
    echo "Connection closed";
};

// Run worker
Worker::runAll();



На клиенте используйте Websocket
Ответ написан
Комментировать
profesor08
@profesor08
Ну вот это NODE.JS, СОКЕТЫ, SOCKET.IO, COMET, не обязательно понадобятся. Из браузера раз за разом шлешь запросы на сервер, сервер возвращает ответы. Все.
Ответ написан
Комментировать
@xfg
как посылать данные из PHP в ноду?

Отправляй не в ноду, отправляй в базу. В redis например. Есть готовое решение https://github.com/socketio/socket.io-redis

Со стороны php https://github.com/rase-/socket.io-php-emitter
Возможно придется форкнуть эту библиотеку и немного подправить под современную версию socket.io, так как библиотека автором не поддерживается.
Ответ написан
Комментировать
@Levhav
Возьмусь за разработку проектов любой сложности.
Вот есть мой опенсорс проект comet-server.com позволяет по средствам апи отправить сообщение через вебсокеты. Интегрировать с существующим кодом будет не сложно. Просто в нужных местах добавите вызовы на отправку данных.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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