无法使 socket.io 在 HTTPS 上工作

Mis*_*r M 7 javascript sockets node.js socket.io

我正在使用简单的 socket.io 2.0.3 服务器,没有 express 或任何类似的东西来在我的 Laravel 应用程序中运行简单的聊天功能。

一切都运行良好,直到我决定将网站切换到 HTTPS。现在 socket.io 拒绝连接(ERR_CONNECTION_CLOSED)。

这是我最简单的设置:

服务器.js:

var io = require('socket.io')(8080, {
    origins : //some stuff
});
Run Code Online (Sandbox Code Playgroud)

HTML文件

<script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/2.0.3/socket.io.js"></script>

var socket = io(':8080');
//more stuff
Run Code Online (Sandbox Code Playgroud)

我在服务器文件夹、intermediate.crt、domain.com.crt 和 domain.com.key 中有所有需要的证书文件

有人可以用最简单的例子来帮助如何在 https 上进行这项工作吗?提前致谢!

编辑:需要不使用 Express 的可能解决方案。

Mis*_*r M 7

我无法用简单的 socket.io 代码编写它,所以我最终还是使用了 express。

如果将来有人需要,这是最简单的工作代码:

服务器.js

var express = require('express');
var app = module.exports = express();
var https = require('https');
var fs = require('fs');
var server = https.createServer({
    key: fs.readFileSync(/*full path to your key*/),
    cert: fs.readFileSync(/*full path to your cert*/),
    ca: fs.readFileSync(/*full path to your intermediate cert*/),
    requestCert: true,
    rejectUnauthorized: false
},app);
server.listen(8080); //listen on port 8080

var io = require('socket.io').listen(server);

io.set('origins', /*your desired origins*/);

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

var sockets = {};
//your socket logic
Run Code Online (Sandbox Code Playgroud)

在 HTML 中:

var socket = io(':8080',{secure: true});
Run Code Online (Sandbox Code Playgroud)