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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在NodeJS中代理websocket连接到其他websockets相关的知识,希望对你有一定的参考价值。

我需要在第三方基于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并尝试使用它,但它没有用。

答案

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

以上是关于如何在NodeJS中代理websocket连接到其他websockets的主要内容,如果未能解决你的问题,请参考以下文章

在 NodeJS 中将 WebSocket 连接到 WebSocketServer

通过 PHP 连接到 socket.io(nodejs)

WebSocket4Net 无法连接到代理

无法通过代理连接到 websocket

将 NestJS 连接到 websocket 服务器

连接到 websockets NodeJS Express 服务器时出错