【发布时间】:2012-05-03 23:58:44
【问题描述】:
我正在尝试使用带有 Socket.IO 的 Node.js 来促进浏览器和客户端之间的消息传递,遵循 the guide。
但是,我必须在 Apache 后面设置反向代理节点。因此,我使用的是 example.com/nodejs/,而不是 node 的 example.com:8080。
这似乎导致 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 的脚本引用。它没有返回预期的 JavaScript 内容——而是返回“Welcome to socket.io”,就好像我点击了http://example.com/nodejs/。
知道我怎样才能完成这项工作吗?
【问题讨论】:
-
我知道这与手头的问题无关(如果我应该打开一个新的 SO 问题,请给我打电话),但我很好奇你的 Apache httpd.conf 是什么样的。我已经设置了代理以传递给实际的 node.js 服务器,但是,我无法让 websockets 代理工作。您能否举例说明您是如何使用 Apache 进行此操作的?
-
对不起,我不能。这个项目是在 2 年前的一次黑客马拉松上完成的,为其设置的服务器已不存在。
标签: node.js socket.io reverse-proxy