javascript - 实现 https 和 socket io
问题描述
我一直在为此寻找高低,但无法找到解决方案。我在服务器中有以下代码:
import express from 'express';
import { createServer } from 'https';
import { Server } from "socket.io";
import fs from 'fs';
const app = express();
const credentials = {
key: fs.readFileSync('../key.pem'),
cert: fs.readFileSync('../cert.pem')
};
// create http/https server
const server = createServer(credentials, app);
const io = new Server(server);
io.on('connection', (socket) => {
console.log('a user connected');
});
server.listen(3000, () => {
console.log('listening on localhost:3000');
});
现在在客户端我有:
import { io } from "socket.io-client";
import fs from "fs";
const socket = io("https://localhost:3000", {
rejectUnauthorized: false,
ca: fs.readFileSync("../cert.pem")
});
socket.on("connect", () => console.log("connected to server"));
如果我将服务器端更改为导入:
import { createServer } from 'http';
代替:
import { createServer } from 'https';
我将客户端更改为:
const socket = io("http://localhost:3000");
代替:
const socket = io("https://localhost:3000");
我的套接字 io 能够正常通信
这只是https。我试图添加证书并设置
rejectUnauthorized: false
无济于事。我发现了这个问题,但没有任何效果。socket io 文档并没有太大帮助。接下来我可以尝试什么?
解决方案
由于 HTTPS 将尝试在 127.0.0.1 处拒绝,WSS 也会尝试拒绝,但无法绕过正确的?
在开发过程中,大多数用户最初都会遇到这堵墙,直到他们有更多时间来正确设置它。
将此代码插入到您的 Web 套接字服务器文件中。
process.env["NODE_TLS_REJECT_UNAUTHORIZED"] = 0;
只有在开发中你才使用它,它永远不会在生产中使用。
推荐阅读
- spring - Spring Security - 不能将@Secured 与角色一起使用
- python - Django 模型从旧版 mysql 数据库自动生成:我是否必须从 models.DO_NOTHING 更改 on_delete 参数的值
- java - Spring security permit all 不适用于多个 url
- plugins - Shopware 6 中自定义字段的继承
- javascript - 从按钮加载微调器
- amazon-web-services - 升级在 AWS 上运行的 YII2 项目后偶尔出现 503 错误
- ag-grid - 保持列顺序折叠一组列的正确方法是什么?
- groovy - Activiti:使用 activiti:expression 定义可重用的 ScriptTaskListener 脚本
- google-analytics - 如何在谷歌数据工作室计算年龄组
- kotlin - 改造通过标题和字段获取响应消息