我试图使用Node.js与Socket.IO来促进浏览器和客户端之间的消息传递,跟随the guide。使用socket.io与服务器上的nodejs与Apache作为反向代理
但是,我不得不在Apache后面设置Node反向代理。所以,而不是example.com:8080节点,我使用example.com/nodejs/。
这似乎会导致Socket.IO失去它自己的感觉。这里是我的节点应用
var io = require('socket.io').listen(8080);
// this has to be here, otherwise the client tries to
// send events to example.com/socket.io instead of example.com/nodejs/socket.io
io.set('resource', '/nodejs/socket.io');
io.sockets.on('connection', function (socket) {
socket.emit('bar', { one: '1'});
socket.on('foo', function(data)
{
console.log(data);
});
});
这是我的客户端文件是什么样子
<!DOCTYPE html>
<html>
<head>
<meta charset=utf-8 />
<title>Socket.IO test</title>
<script src="http://example.com/nodejs/socket.io/socket.io.js"></script>
<script>
var socket = io.connect('http://example.com/nodejs/');
console.log(socket);
socket.on('bar', function (data)
{
console.log(data);
socket.emit('foo', {bar:'baz'});
});
socket.emit('foo',{bar:'baz'});
</script>
</head>
<body>
<p id="hello">Hello World</p>
</body>
</html>
这里的问题是脚本参考http://example.com/nodejs/socket.io/socket.io.js。它不返回预期的javasscript内容 - 而是返回“欢迎来到socket.io”,就像我击中http://example.com/nodejs/一样。
任何想法如何使这项工作?
我知道这与手边的问题无关(如果我应该打开一个新的SO问题,请打电话给我),但我很好奇你的Apache httpd.conf是什么样的。我有代理设置传递给实际的node.js服务器,但是,我无法让websockets代理工作。你能举个例子说明你如何用Apache做这件事? – pmalbu
对不起,但我不能。这个项目在2年前的黑客马拉松赛中完成,并且为其设置的服务器不再存在。 –