如何在NodeJS中代理websocket连接到其他websockets

时间:2018-04-02 21:53:44

标签: node.js http websocket

我需要在第三方基于Web套接字的聊天应用程序之上创建一个小的身份验证层。我有一个简单的API(get)可以从请求中验证api令牌。我想要做的是基本上验证他们的令牌(我知道该怎么做),然后将websocket连接代理到实际的聊天服务器。

我一直在寻找解决方案,this thread似乎在正确的方向上给出了一些指示,但我无法让任何解决方案起作用。

var http = require('http'),
    WebSocket = require('faye-websocket'),
    conf = require('./conf.json');

var server = http.createServer();

server.on('upgrade', function(request, socket, body) {
  console.log('upgrade fired');
  var frontend = new WebSocket(request, socket, body),
      backend  = new WebSocket.Client('ws://echo.websocket.org');

  frontend.pipe(backend).pipe(frontend);
});




server.on('connection', function(socket) {
  console.log('connection')
  backend = new WebSocket.Client('ws://echo.websocket.org');
  console.log(backend);
  socket.pipe(backend).pipe(socket);
})



server.listen(conf.port);
console.log('Listening on '+port.conf);

连接事件被触发,但是应该在ws连接上触发的升级事件永远不会。

目标是首先验证外部服务器的api密钥,然后通过websocket连接向该节点服务器请求打开聊天websocket的代理。为简单起见,我很可能将api键作为get参数传递。我也看了this package并尝试使用它,但它没有用。

1 个答案:

答案 0 :(得分:1)

问题最终与nginx有关。我忘了我是通过反向代理代理请求,默认情况下,nginx不支持ws://连接,因此它会丢弃它。