我被Socket.io交换所困扰。如果javascript代码托管在浏览器(Chrome / Firefox)中,则连接在中间或不存在代理的情况下均有效。
<script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/2.1.1/socket.io.js"></script>
<script>
var socket = io('https://uri', { secure: true, reconnect: true, rejectUnauthorized: false });
socket.on('connect', function () {
console.log('Connected to server!');
socket.emit('register', 'ClientName');
});
</script>
相反,使用节点v10.4.0和模块“ socket.io”:“ ^ 2.1.1”,只有在直接连接的情况下,相同的代码才能在nodejs上运行。
我尝试使用socket.io-proxy(相当旧),但是似乎它与socket.io-client不一致,并且不起作用,或者我缺少了一些东西。
很明显,“在浏览器脚本中”可以访问代理设置/通道...,或者访问节点运行时不知道的其他设置。
感谢您的任何建议。
洛伦佐
答案 0 :(得分:1)
您设法解决问题了吗? 如果您使用的是简单的http(s)代理,则可以尝试使用https-proxy-agent软件包。
var HttpsProxyAgent = require('https-proxy-agent');
let p = 'http://my.proxy.address:8080';
let agent = new HttpsProxyAgent(p);
let opts = {
secure: true,
rejectUnauthorized: false,
reconnect: true,
agent: agent
};
let socket = require('socket.io-client').connect('https://my.socket.io.server', opts);