这些是我正在使用的节点和必需模块的版本:
当我运行以下程序时,我的控制台输出如下所示,并没有超出这一点:
$ node app.js
proxy: got upgrade, proxying web request
wss: got connection下面是代码:
// app.js
// A simple proxying example
//
// Setup websocket server on port 19000
// Setup proxy on port 9000 to proxy to 19000
// Make a websocket request to 9000
//
var WebSocket = require('ws'),
WebSocketServer = WebSocket.Server,
proxy = require('http-proxy');
// goes in a loop sending messages to the server as soon as
// the servers are setup
var triggerClient = function() {
var ws = new WebSocket('ws://localhost:9090/');
ws.on('open', function() {
console.log('ws: connection open');
setInterval(function() {
ws.send("Hello");
}, 1000);
});
ws.on('message', function(data) {
console.log('ws: got ' + data);
});
}
// setup websocket server and a proxy
//
var go = function() {
// setup a websocket server on port 19000
//
var wss = new WebSocketServer({ port: 19000 });
wss.on('connection', function(ws) {
console.log('wss: got connection');
ws.on('message', function(data) {
console.log('wss: got ' + data);
ws.send('wss response: ' + data);
});
});
// setup a proxy server
var server = proxy.createServer(function (req, res, proxy) {
proxy.proxyRequest(req, res, {
host: 'localhost',
port: 19000
});
});
server.on('upgrade', function (req, socket, head) {
console.log('proxy: got upgrade, proxying web request');
server.proxy.proxyWebSocketRequest(req, socket, head, {
host: 'localhost',
port: 19000
});
});
server.listen(9090, triggerClient);
};
process.nextTick(go);当我试图使用hipache时,我的问题最终开始了,然后我将事情简化为节点-http-代理,最后是这段代码。
如果您将WebSocket客户端连接到的端口从9090更改为19000 (从而绕过了代理),那么一切看起来都很好。
如有任何建议、指点、反馈,将不胜感激。
谢谢!
发布于 2013-10-23 20:54:50
核心问题是节点的主分支--http-代理只兼容节点<= 0.8.x (请参阅https://github.com/nodejitsu/node-http-proxy#when-to-use-node-http-proxy):有一棵树实现了对0.10.x的支持(参见https://github.com/nodejitsu/node-http-proxy/tree/caronte),但它不是主线分支,而且我还没有找到任何关于何时将其合并和可用的指示。
https://stackoverflow.com/questions/18294586
复制相似问题