javascript - 无法使 socket.io 在 HTTPS 上工作

标签 javascript node.js sockets 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
});

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/

相关文章:

javascript - polymer Javascript。在点击事件时无法将数据传递到其他 polymer 元素而不调用 polymer 元素

javascript - 如何在我的代码中实现回调/等待?

sockets - NodeJS程序出错时只断开一个socket

javascript - 我想在进行 axios http 请求之前 setState,但不能

javascript - NodeJS,使用 MongoDB native 驱动程序,如何将 ObjectID 转换为字符串

javascript - 如何用 JavaScript 制作闪烁动画?

node.js - GraphQL Node JS 应用程序的单元测试

javascript - 解析单个用户输入字符串以获取高级搜索条件

java - DatagramSocket.receive() 和 SocketException

c++ - 绑定(bind)并连接的 Boost.Asio 数据报 (UDP) 套接字