WebSocket在HTTPS上失败

时间:2017-11-03 16:26:36

标签: javascript node.js socket.io

我正在尝试构建一个小的websocket应用程序。我试图在已经运行在安全HTTPS协议上的网站上实现它,因此websocket必须在wss上才能工作。

我使用以下代码构建服务器:

var express = require('express');
var app = express();
var fs = require('fs');

var key = fs.readFileSync('/etc/apache2/ssl/www.bigriss.com_private_key.key');
var cert = fs.readFileSync( '/etc/apache2/ssl/www.bigriss.com_ssl_certificate.crt' );
var ca = fs.readFileSync( '/etc/apache2/ssl/bigriss.com_ssl_certificate_INTERMEDIATE.crt' );

var options = {
  key: key,
  cert: cert,
  ca: ca
};

var https = require('https').createServer(options, app);
var io = require('socket.io')(https);
var port = process.env.PORT || 8080;

app.get('/', function(req, res){
  res.sendFile(__dirname + '/index.html');
});

io.on('connection', function(socket){
  socket.on('chat message', function(msg){
        var token = socket.handshake.query.token;
    io.emit('chat message', msg + token);
  });
});

https.listen(port, function () {
    console.log('listening on *:' + port);
});

在我看来,这是一个非常简单和标准的实现。我可以正确访问网址https://example.com:8080,并提供在index.html读取的内容。在这个html文件中,我尝试使用以下方法建立连接:

var socket = io.connect('https://bigriss.com:8080/?token=abc', {
        transports: ['websocket'], 
        upgrade: false,
        secure: true, 
        reconnect: true, 
        rejectUnauthorized : false
});

玩了好几次选项。无论如何,我在Chrome控制台中收到错误:

failed: Connection closed before receiving a handshake response
failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED

在终端中,我收到以下节点错误:

nodejs: ../src/util-inl.h:196: TypeName* node::Unwrap(v8::Local<v8::Object>) [with TypeName = node::TLSWrap]: Assertion `(object->InternalFieldCount()) > (0)' failed.
Aborted

我已经使用HTTP测试了这个相同的设置,它可以正常工作。 HTTPS中缺少什么特别的东西?

0 个答案:

没有答案