将NodeJS Realtime与现有PHP应用程序集成

时间:2011-12-19 08:53:21

标签: php node.js yii real-time

我在Apache服务器上运行了一个现有的PHP应用程序。

问题,是否可以通过“Proxy-Pass”将Node.I客户端JS嵌入NodeJS服务器?

说,我在数据库中用PHP保存了一个键值对,同时将该消息发送给连接到该频道的所有人,我刚刚保存的值。

如果我使用NodeJS和Socket.IO/Faye,我会将客户端JS嵌入Apache提供的页面中。但基本上该脚本来自Proxy-Pass到NodeJS。

对此的一些启示将是非常友好的。

谢谢

2 个答案:

答案 0 :(得分:5)

这里有一个类似的问题:

Accessing socket.io server via Apache served pages

你可以使用Apache实现这一点,但我认为最好是直接连接到Socket.IO或者使用更好的代理服务,比如HAProxy:HAProxy + WebSocket Disconnection

我会选择HAProxy并使用一个端口,例如4000,特别是对于Socket.IO和端口843用于Flash-WebSockets(Socket.IO将检查WebSockets是否在浏览器中可用,如果它们不是SIO可以更改传输到Flash-WebSockets;提供传输顺序是WS native,WS Flash等):https://gist.github.com/1014904(检查HAProxy的配置是否有端口843)。

选择HAProxy的原因是,当我需要处理大流量时,我可以在多台机器上使用多个进程,而HAProxy非常擅长。

答案 1 :(得分:0)

第一个想法是建立一个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。

我认为这比任何其他解决方案都简单/清洁。 ...除非有一些用例,否则此解决方案不适合。