好的,所以我已经完成了所有工作......
修改 apache2 使其只监听环回接口:
vim /etc/apache2/ports.conf
将“听 80”改为“听 127.0.0.1:80”
让你的 socket.io 服务器(“server.js”)监听 8001 端口:
var app = require('express')();
var server = require('http').Server(app);
var io = require('socket.io')(server);
server.listen(8001);
io.on('connection', function (socket) {
socket.emit('news', { hello: 'world' });
/*socket.on('my other event', function (data) {
console.log(data);
});*/
});
node server.js
现在您需要一个代理 ("proxy.js") 监听您的公共接口 (x.x.x.x:80)
它会根据需要在 apache2 和 socket.io 之间拆分流量
var http = require('http');
var httpProxy = require('http-proxy');
var routes = [
'http://127.0.0.1:80',
'http://127.0.0.1:8001'
];
var proxy = new httpProxy.createProxyServer({});
var proxyServer = http.createServer(function (req, res) {
var route=0;
var split1=req.url.split('/');
if (split1.length>0) {
if(split1[1]=="socket.io"){ //requests to "socket.io" get tapped off to nodejs
route=1;
}
}
proxy.web(req, res, {target: routes[route]});
});
proxyServer.on('upgrade', function (req, socket, head) {
proxy.ws(req, socket, head, {target: routes[1]});
});
proxyServer.listen(80,"x.x.x.x");
//proxyServer.listen(80,"ip:v6:address"); //optional...
sudo node proxy.js
这是网页的 HTML/jQuery:
<script src="./lib/socket.io/socket.io-1.1.0.js"></script>
<script>
$(document).ready(function(){
var socket = io.connect('http://www.mysite.me:80'); //where mysite.me resolves to x.x.x.x
socket.on('news', function (data) {
console.log(data);
socket.emit('my other event', { my: 'data' });
});
});
</script>
现在我需要一种方法来确定如何确保 proxy.js 不会崩溃并且是防锤的!