我目前有一个使用passport.js身份验证和socket.io for web套接字的工作应用程序。它通过http协议工作正常,但是一旦我告诉socket.io监听https服务器,deserializeUser()
就会触发每个连接事件并且没有连接,就不会调用socket.io中间件。
HTTP(有效):
var server = http.createServer(app).listen(port) //3000;
var io = require('socket.io').listen(server);
HTTPS(失败):
var httpsServer = https.createServer(sslOptions, app).listen(httpsPort)//8443;
//also attempted without any additional options supplied to io.listen()
var io = require('socket.io').listen(httpsServer, {
"log level": 3,
"match origin protocol" : true,
"transports" : ['websocket']
});
客户方:
var socket = io();
$('form').submit(function(){
socket.emit('chat message', $('#m').val());
$('#m').val('');
return false;
});
应该响应的Socket.io中间件(同样,当http服务器提供给io.listen()
时,相同的中间件也能正常工作):
module.exports = function(app, io){
io.on('connection', function(socket){
console.log('base connection');
socket.on('chat message', function(msg){
console.log('message: ' + msg);
});
socket.on('disconnect', function(){
console.log('disconnect');
});
});
};
我必须以某种方式在客户端指定协议吗?我假设io管理器应该使用url协议。我还假设传递"match origin protocol" : true
作为选项应该使用https。任何建议或帮助表示赞赏。
编辑:
客户端抛出网络错误net::ERR_INSECURE_RESPONSE