2

我有一个socket.io带有这样代码的服务器:

var sticky = require('sticky-session'); sticky(function() {
    var app = require('http').createServer(handler);

    function handler (req, res) {
        res.writeHead(200, {
            "Access-Control-Allow-Origin": "*"
        });

        return res.end('pong');
    }

    var io = require('socket.io')(app, {'origins' : '*' + config.application.hostname + '*:*'});

    const newmessagesConnections = io.of('/new-messages');
    newmessagesConnections.on('connection', function (client) {
    .....
    });

    const callingsConnections = io.of('/callings')
    callingsConnections.on('connection', function (client) {
    .....
    });

    return app;
}).listen(config.application.port, function() {
    console.log('server started on ' + config.application.port + 'port');
});

它适用于 WS 协议,但我也想支持 WSS 协议。当我使用粘性会话时,是否可以同时使用 WS 和 WSS 协议?

来自sticky-session文档:

粘性会话模块正在使用它们的 IP 地址平衡请求。因此客户端将始终连接到同一个工作服务器,并且 socket.io 将按预期工作,但在多个进程上!

但是我想通过 WS 和 WSS 建立开放连接,但我不明白谁来更新我的服务器以保持 WS 和 WSS 连接。

4

1 回答 1

2

在您的客户端代码中,当您创建套接字连接时,请尝试以下操作:

if(location.protocol==='https:'){
    socket = io.connect( 'wss://'  + location.hostname + '/', {    
        //options here like:
        'forceNew':true
    });
}
else{
    socket = io.connect( 'ws://'  + location.hostname + '/', {
        //options here like:
        'forceNew':true
    });
}
于 2016-01-14T16:00:55.607 回答