Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/438.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使WebSocket通过node.js中的代理_Javascript_Node.js_Proxy_Websocket_Push Notification - Fatal编程技术网

Javascript 如何使WebSocket通过node.js中的代理

Javascript 如何使WebSocket通过node.js中的代理,javascript,node.js,proxy,websocket,push-notification,Javascript,Node.js,Proxy,Websocket,Push Notification,概括这将是一个问题。。。如何使WebSocket通过node.js中的代理 在我的特殊情况下我正在使用pusher.com和他们推荐的。查看代码内部,我想知道一些关于我应该更改什么的提示,以便使这个库能够与代理一起工作。。。您可以查看代码 也许我应该以某种方式替换或修改图书馆正在使用的 编辑 谢谢你的回答/评论!需要考虑的几件事(请原谅,如果我对其中的一些/所有问题都有错误,请只是学习): 我不想创建代理服务器。我只想使用公司内现有的代理服务器来代理我的WebSocket请求(特别是pushe

概括这将是一个问题。。。如何使WebSocket通过node.js中的代理

在我的特殊情况下我正在使用pusher.com和他们推荐的。查看代码内部,我想知道一些关于我应该更改什么的提示,以便使这个库能够与代理一起工作。。。您可以查看代码

也许我应该以某种方式替换或修改图书馆正在使用的

编辑

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

  • 我不想创建代理服务器。我只想使用公司内现有的代理服务器来代理我的WebSocket请求(特别是pusher.com)
  • 只是想让你知道,如果我使用一个类似windows的代理,并且我设置了规则来检查到端口443的所有连接,以通过代理服务器proxy my.coporate.com:1080(类型SOCKS5),它就像一个符咒一样工作
  • 但我不想走这条路。我想通过编程在我的NodeJS代码中配置这个代理服务器(即使这涉及到修改我提到的pusher库)
  • 我知道如何使用HTTP实现这一点(请查找提到如何使用代理的部分)。
    • 对于websockets,我需要一个类似的东西
试试看

它允许您通过代理发送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代理尚不支持WebSocket。最好的解决方法是通过指定wss://(websocket安全协议)使用加密:


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

From


谢谢你的回答,鲁道夫!我很困惑。。。在我的问题中,我发布了一个与pusher api交互的代码链接,该api使用了加密wss://正如您所说的,我是否遗漏了一些东西以便在代理服务器后面工作?这里的其他答案似乎假设您正在尝试为您的WebSocket设置自己的node.js代理。您的问题是您的最终用户在代理服务器后面,因此他们的浏览器无法建立连接吗?您是否可以控制代理或知道它是哪个版本?正确。我的问题是,我必须使用公司代理才能连接到pusher web套接字端点。使用ssl是有效的,因为它将使用connect方法。如果在代码中执行相同的操作,则会得到相同的结果。我希望wss:将触发与@dandavis相同的超时。谢谢分享!我会试试这个。。。我读了一点,偶然发现了另一个stackoverflow,它也引用了你所说的图书馆。如果您可以用一个具体的示例进行扩展,或者使用适用于pusher.com的带有WebSocket的节点http代理,我们将不胜感激。afaict这实现了一个代理,并且没有解释如何通过代理打开套接字。你能指出我缺少的东西吗?好吧,你可以简单地使用websocket协议和代理(wss://),然后代理websocket!我不认为这回答了这个问题。。。这只是增加了一个额外的中间人。它没有显示如何通过代理连接到远程ws端点。OP-你找到解决方案了吗?你可以使用pusher的http功能以与套接字几乎相同的方式进行交互,如果没有其他功能的话…你检查websockets模块是对的。。。它应该是已配置代理上的CONNECT方法。那个模块住在哪里?谢谢你的评论!我已经扩展了我的问题。如果有帮助的话,您可以检查一下,这是一个建立在WebSocket之上的库。@dandavis在pusher.com中,我只找到了服务器端的HTTP REST API。。。对于客户端(这是我想要的,在一个频道中等待事件),我什么也没找到。@Chris Wesseling我知道这是一年多以后的事了。。。我已经使用http和net模块实现了一个节点代理,它可以很好地使用http和https。但是,我的socket.io程序失败。如何让socket.io使用wss而不是ws?这是我的反向代理。现在,对于转发代理,如果使用socket.io的站点不使用wss,并且我的转发代理对WebSocket没有明确的支持,我该如何使用它们?@samir您的评论看起来像是两个问题。试着问他们,并将这个问题或我的回答作为你所做的相关研究的参考。在评论中开始一个新的帖子被认为是不好的形式。@Chris Wesseling,这很公平。我在这里发布了一个新问题:[
wss://ws.pusherapp.com:[port]/app/[key]
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();
});