首页 > 解决方案 > 实现 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 文档并没有太大帮助。接下来我可以尝试什么?

标签: javascriptnode.jswebsocketsocket.io

解决方案


由于 HTTPS 将尝试在 127.0.0.1 处拒绝,WSS 也会尝试拒绝,但无法绕过正确的?

在开发过程中,大多数用户最初都会遇到这堵墙,直到他们有更多时间来正确设置它。

将此代码插入到您的 Web 套接字服务器文件中。

process.env["NODE_TLS_REJECT_UNAUTHORIZED"] = 0;

只有在开发中你才使用它,它永远不会在生产中使用。


推荐阅读