我正在使用简单的 socket.io 2.0.3 服务器,没有 express 或任何类似的东西来在我的 Laravel 应用程序中运行简单的聊天功能。
在我决定将网站切换到 HTTPS 之前,一切都运行良好。现在 socket.io 拒绝连接(ERR_CONNECTION_CLOSED)。
这是我最简单的设置:
服务器.js:
var io = require('socket.io')(8080, {
origins : //some stuff
});
HTML文件
<script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/2.0.3/socket.io.js"></script>
var socket = io(':8080');
//more stuff
我在服务器文件夹中有所有需要的证书文件,intermediate.crt、domain.com.crt 和 domain.com.key
有人可以用最简单的例子帮助说明如何在 https 上运行吗?提前致谢!
编辑:需要不使用 Express 的可能解决方案。
最佳答案
我无法用简单的 socket.io 代码来写这个,所以我最终还是使用了 express。
这是最简单的工作代码,如果将来有人需要的话:
server.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
在 HTML 中:
var socket = io(':8080',{secure: true});
关于javascript - 无法使 socket.io 在 HTTPS 上工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46756624/