如何在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的主要内容,如果未能解决你的问题,请参考以下文章