2011-12-19 103 views
0

我有一个现有的PHP应用程序在Apache服务器上运行。将NodeJS Realtime与现有的PHP应用程序集成

问题,是否可以通过“Proxy-Pass”向NodeJS服务器嵌入Socket.IO客户端JS?假设我使用PHP在数据库中保存了一个键值对,同时将该消息发送给与该频道相连的所有人,即我刚刚保存的值。

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

对此的一些光将是非常善良。

感谢

+0

可能使用Redis PubSub? – Maziyar 2013-07-22 12:09:52

回答

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

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

+0

嘿,谢谢你的及时回复。是否可以展示如何为此目的配置HAProxy? – sgomez 2011-12-19 10:05:18

+0

看看:http://stackoverflow.com/questions/4360221/haproxy-websocket-disconnection/4737648#4737648你还需要从这里添加Flash的东西:https://gist.github.com/ 1496429 – alessioalex 2011-12-19 10:08:29

+0

谢谢! Socket.IO与上述设置完美配合! – sgomez 2011-12-20 07:05:46

0

第一个想法是制作一个Socket.io客户端,除了你会忙着窃听不是标准的Socket.io协议(WebSocket是一个标准)之外,并没有那么难。我过去做过这样的事情,但这是浪费时间。

由于Node.js的具有共享范围(全球范围)和它主要是一个单一的流程应用程序,你总是可以用Socket.io交互的非实时专用HTTP服务器:

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。

我认为这比任何其他解决方案更简单/更清洁。 ......除非有一些用例说明这种解决方案不适合。

相关问题