2011-12-19 54 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。

我認爲這比任何其他解決方案更簡單/更清潔。 ......除非有一些用例說明這種解決方案不適合。

相關問題