【问题标题】:Integrating NodeJS Realtime with existing PHP Application将 NodeJS Realtime 与现有 PHP 应用程序集成
【发布时间】:2012-01-23 10:37:12
【问题描述】:

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

问题,是否可以通过“代理传递”将 Socket.IO 客户端 JS 嵌入到 NodeJS 服务器?

比如说,我用 PHP 在 DB 中保存了一个键值对,同时将该消息发送给连接到该通道的每个人,即我刚刚保存的值。

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

对此进行一些说明会非常友好。

谢谢

【问题讨论】:

  • 可以使用 Redis PubSub 吗?

标签: php node.js yii real-time


【解决方案1】:

这里有一个类似的问题:

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 本机、WS Flash 等):https://gist.github.com/1014904(检查 HAProxy 的配置以了解端口 843)。

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

【讨论】:

【解决方案2】:

首先想到的是做一个 Socket.io 客户端,这并不难,只是你会忙着破解不标准的 Socket.io 协议(WebSocket 是一个标准)。我过去做过类似的事情,但这是浪费时间。

由于 Node.Js 有一个共享范围(The Global Scope)并且它主要是一个单进程应用程序,你总是可以创建一个专用的 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。

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

【讨论】:

    猜你喜欢
    • 2016-08-27
    • 2011-02-17
    • 2023-03-14
    • 1970-01-01
    • 2018-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多