如何使websockets在node.js中通过代理



概括这将是一个问题…如何使websockets通过代理在node.js?

在我的特殊情况下我使用pusher.com与他们推荐的node.js客户端库。查看代码内部,我想知道一些提示,我应该改变什么,以使这个库与代理一起工作…你可以看看这里的代码

也许我应该以某种方式替换或修改正在使用的库的websockets模块?

编辑

谢谢你的回答/评论!需要考虑的几件事(如果我对其中一些/所有的错误,请原谅,只是学习):

    我不想创建代理服务器。我只是想在我的公司内使用一个现有的代理服务器,以代理我的websockets请求(特别是pusher.com)
  • 只是让你知道,如果我使用一个像windows代理程序一样的代理程序,并设置规则来检查到端口443的所有连接,以通过代理服务器 proxy-my.corporate.com:1080(类型SOCKS5)它像一个魅力。
  • 但是我不想走这条路。我想以编程方式在我的节点js代码中配置这个代理服务器(即使涉及修改我提到的推送库)
  • 我知道如何使用请求模块为HTTP做到这一点(查找提到如何使用代理的部分)。
    • 我想要一个类似的东西websockets

Fromhttps://www.npmjs.com/package/https-proxy-agent

var url = require('url');
var WebSocket = require('ws');
var HttpsProxyAgent = require('https-proxy-agent');
// HTTP/HTTPS proxy to connect to
var proxy = process.env.http_proxy || 'http://168.63.76.32:3128';
console.log('using proxy server %j', proxy);
// WebSocket endpoint for the proxy to connect to
var endpoint = process.argv[2] || 'ws://echo.websocket.org';
var parsed = url.parse(endpoint);
console.log('attempting to connect to WebSocket %j', endpoint);
// create an instance of the `HttpsProxyAgent` class with the proxy server information
var options = url.parse(proxy);
var agent = new HttpsProxyAgent(options);
// finally, initiate the WebSocket connection
var socket = new WebSocket(endpoint, { agent: agent });
socket.on('open', function () {
  console.log('"open" event!');
  socket.send('hello world');
});
socket.on('message', function (data, flags) {
  console.log('"message" event! %j %j', data, flags);
  socket.close();
});

为websockets使用代理应该与https连接大致相同;您应该使用CONNECT方法。至少HTTP和HTML5规范都是这么说的。因此,如果您的代理实现了CONNECT,就可以开始了。

试试node-http-proxy

它允许你通过代理发送http或websocket请求。

var http = require('http'),  
httpProxy = require('http-proxy');
//
// Create a basic proxy server in one line of code...
//
// This listens on port 8000 for incoming HTTP requests 
// and proxies them to port 9000
httpProxy.createServer(9000, 'localhost').listen(8000);
//
// ...and a simple http server to show us our request back.
//
http.createServer(function (req, res) {  
  res.writeHead(200, { 'Content-Type': 'text/plain' });
  res.write('request successfully proxied!' + 'n' + JSON.stringify(req.headers, true, 2));
  res.end();
}).listen(9000);

来源:链接

大多数web代理还不支持websockets。最好的解决方法是通过指定wss://(websocket安全协议):

来使用加密。
wss://ws.pusherapp.com:[port]/app/[key]

相关内容

  • 没有找到相关文章