当前位置: 首页 > 面试题库 >

Socket.IO无法通过https连接

唐珂
2023-03-14
问题内容

我有一个使用socket.IO的node.js应用程序。它可以在http上正常工作,但是当尝试通过https连接到套接字时,没有任何反应。
这是代码的一部分:

var fs = require('fs');

var ioHttp = require('socket.io').listen(8899, {  
    'flash policy port': -1  
});

initSocket(ioHttp);

var ioHttps = require('socket.io').listen(8895, {  
    key: fs.readFileSync('/path/to/file/file.key'),  
    cert: fs.readFileSync('/path/to/file/file.crt'),  
    ca: [  
        fs.readFileSync('/path/to/file/sub.class1.server.ca.pem'),  
        fs.readFileSync('/path/to/file/ca.pem')  
    ],  
    'flash policy port': -1   
});

initSocket(ioHttps);

initSocket功能:

function initSocket(io) {  
    io.enable('browser client minification');  
    io.enable('browser client etag');  
    io.enable('browser client gzip');

    io.set('transports', [  
        'websocket',  
        'htmlfile',
        'flashsocket',
        'jsonp-polling'  
    ]);

    io.sockets.on('connection', function (client) {
        //the connnection is handled here
    });
}

客户端连接如下:

var secureConnection = false;  
var port = 8899;
if (window.location.protocol === 'https:') {  
    port = 8895;
    secureConnection = true;
}

var socket = io.connect('domain.org', {port: port, secure: secureConnection});

正如我说的,在http上一切正常,但是在https上连接会给我“连接被中断”。我究竟做错了什么?


问题答案:

您不能socket.iohttps服务器那样初始化服务器。您必须启动一个单独的https服务器,然后将socket.io服务器附加到该服务器。

var https = require('https'),     
    fs =    require('fs');

var options = {
    key:    fs.readFileSync('ssl/server.key'),
    cert:   fs.readFileSync('ssl/server.crt'),
    ca:     fs.readFileSync('ssl/ca.crt')
};
var app = https.createServer(options);
io = require('socket.io').listen(app);     //socket.io server listens to https connections
app.listen(8895, "0.0.0.0");


 类似资料:
  • 我正在为Swift使用框架。我试图通过websockets API连接,我有一个方法,它在的中被调用。我已经全局声明了我的manager和socketClient,我将把方法的代码放在下面: 我面临的问题是没有调用回调,因此无法发出ping消息。以下是日志: 2018-02-18 19:02:20.589916+0530股票-蛋糕[10965:3662189]日志SocketManager:添加引

  • 当用户关闭选项卡或重新加载页面时,disconnect事件应该会触发,但当通过Nginx和CloudFlare传递连接时,则不会触发。提前感谢您的帮助! 更新:似乎在重新加载/关闭断开连接事件后的几秒钟内最终注册。

  • 问题内容: 摘要 我在IE 7,8,9的HTTPS上使用@ font-face遇到了问题-它根本没有加载。不管包含的HTML页面是否托管在HTTPS上都没有关系, 当我尝试通过HTTP加载EOT字体时,它可以工作,而HTTPS则不能 。有人看到过这种行为吗? 托管字体的服务器正在发送正确的content-type =“ application / vnd.ms-fontobject” 我尝试了多种

  • 我一直在尝试使用HttpSurlConnection与我的服务器进行https连接。代码不断抛出以下异常: java.security.cert.CertPathValidatorException:找不到证书路径的信任锚。 openssl s_client-debug-connect google.com:443

  • 问题内容: 我需要测试正在部署到HTTPS终结点上部署的预发布环境的Web服务。不幸的是,SoapUI 异常失败。我同时使用了4.6.4版本和非常新的5.0版本。 信封: 终结点是https,startcom证书,网络使用代理(但是同一问题,没有代理使用不同的网络) 我已经花了很多时间,也许是一天都在搜寻解决方案。特别是此链接看起来很有希望:https : //forum.soapui.org/v

  • 我试图从apache反向代理后面连接到socket.io服务器。我在端口8888上运行apache。nodejs服务器运行在同一台机器的端口9096上。为了进行测试,在我的本地计算机上配置代理,如下所示: 在客户端代码中,我执行如下操作: 如何使它连接到本地主机:8888/some/path/socket.io/1?123983759 ?