Интеграция NodeJS Realtime с существующим приложением PHP - PullRequest
0 голосов
/ 19 декабря 2011

У меня есть существующее PHP-приложение, работающее на сервере Apache.

Вопрос, возможно ли встроить клиентский JS Socket.IO с помощью Proxy-Pass на сервер NodeJS?

Скажем, я сохраняю пару ключ-значение с PHP в БД и одновременно отправляю это сообщение всем, кто подключен к этому каналу, значение, которое я только что сохранил.

Если я использовал NodeJS и Socket.IO/ Faye Я бы встраивал JS на стороне клиента в страницы, обслуживаемые Apache.Но, по сути, этот скрипт происходит от Proxy-Pass к NodeJS.

Некоторый свет на это будет очень любезен.

Спасибо

Ответы [ 2 ]

5 голосов
/ 19 декабря 2011

Здесь есть похожий вопрос:

Доступ к серверу socket.io через обслуживаемые страницы Apache

Этого можно добиться с помощью Apache, но я думаю, что это будетЛучше либо напрямую подключиться к Socket.IO, либо использовать что-то лучшее для прокси, например HAProxy: HAProxy + Отключение WebSocket

Я бы выбрал HAProxy и использовал бы порт, например 4000, например, особенно для Socket..IO и порт 843 для Flash-WebSockets (Socket.IO проверит, доступны ли WebSockets в браузере и, если они не SIO, может изменить транспорт на Flash-WebSockets; при условии, что ваш транспортный порядок является собственным WS, WS Flash и т. Д.): https://gist.github.com/1014904 (проверьте конфигурацию HAProxy для порта 843).

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

0 голосов
/ 22 января 2012

Первая мысль - создать клиент Socket.io, ну, это не так сложно, за исключением того, что вы будете заняты взломом протокола Socket.io, который не является стандартным (WebSocket является стандартным).Я делал что-то подобное в прошлом, но это была пустая трата времени.

Так как Node.Js имеет общую область действия (Глобальная область) и это в основном одно приложение процесса, вы всегда можете сделатьвыделенный HTTP-сервер для взаимодействия не в реальном времени с Socket.io:

var app = require('http').createServer(function S(req, res){
    res.writeHead(200, {
        'Content-Type': 'text/html'
    });

    res.end('');


    var i;
    var sockets = io.sockets.sockets;
    for (i in sockets) {
        if (sockets.hasOwnProperty(i)) {
            var socket = sockets[i];
            // you have res, and socket so so something with it!
            socket.emit('myevent', {msg: "json is cool :)"});
        }
    }

});

var io = require('socket.io').listen(app);
app.listen(80);

io.sockets.on('connection', function (socket) {

    socket.on('theirsevent', function (data) {

    });
});

ИМХО, это намного лучше, чем модификация apache с еще большим количеством модулей.Это может даже работать с Python и .Net, поскольку это HTTP.

Я думаю, что это намного проще / чище, чем любое другое решение.... Если есть какой-то вариант использования, который не подходит этому решению.

...