node.js - 如何制作socket io | node.js - 使用 SSL

标签 node.js ssl websocket https socket.io

我在现场使用带有 apache 的 node.js 时遇到问题。
如果在没有 SSL 的情况下使用 http node.js 和 apache 正在 env 中使用我的域。文件
如果我删除 SSL 代码,它运行良好,但是有了它,我会收到一个到 http://mydomain.io/socket.io/1/?t=XXXXXXXXX 的请求
但是当我使用 let encrypt 启用 SSL
我的网站正在运行,但与 Node js + socket io 连接时出现错误 404
*请注意,它没有尝试使用 https,这会导致它失败。
我正在测试 chrome、firefox 和 edge 仍然无法修复。
如果这是一个简单的问题,我深表歉意,我是 node/socket.io 新手。
谢谢!

在这里,我的详细信息代码在使用 http | 时有效。但不能将 https 与 let encrypt 域一起使用

const pino = require('pino')
const https = require('https');
const { Boom } = require('@hapi/boom')
const fs = require('fs')
const chalk = require('chalk')
require('dotenv/config')
const express = require('express')
const socket = require("socket.io");
const { toDataURL } = require('qrcode')
const mysql = require('mysql');
require('dotenv').config();
const request = require('request');

const app = express()
const host = process.env.HOST ?? '127.0.0.1'
const port = parseInt(process.env.PORT ?? 3000)
app.use(express.urlencoded({ extended: true }))
app.use(express.json())
const ser = app.listen(port, host, () => {
    console.log(`Server is listening on http://${host}:${port}`)
})
const io = socket(ser);

const db = mysql.createConnection({
    host: process.env.DB_HOSTNAME,
    user: process.env.DB_USERNAME,
    password: process.env.DB_PASSWORD,
    database: process.env.DB_DATABASE
});

db.connect((err) => {
    if (err) throw err;
    console.log('Mysql Connected...');
});

const sessionMap = new Map()

最佳答案

我以前遇到过类似的问题,您需要 2 台不同的服务器,一台用于 http,一台用于 https。

var usinghttps = false;
if(usinghttps) {
    var options = {
        key: fs.readFileSync("/etc/letsencrypt/live/us2.swordbattle.io/privkey.pem"),
        cert: fs.readFileSync("/etc/letsencrypt/live/us2.swordbattle.io/fullchain.pem"),
    };
 httpsserver = https.createServer(options, app).listen(443);
}
 server = http.createServer(app); 
然后创建 socket.io 服务器,
const io = new Server(usinghttps ? httpsserver:server);
这对我个人有用,不确定它是否适用于所有应用程序。

关于node.js - 如何制作socket io | node.js - 使用 SSL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72098389/

相关文章:

java - 在 Java 6(GlassFish 3 服务器)中设置 SSL

java - jetty websockets 发送二进制数据(图片)

node.js - 修改 javascript 文件的 Grunt 任务

java - 为什么即使指定了 TFramedTransport,Node JS 也会提示缺少 TFramedTransport?

java - 来自 Thawte 的 Glassfish 4.0 SSL 证书

ssl - 如何调试 https ://site in Eclipse with Zend debugger and PDT

ssl - 如何以编程方式为 Tyrus WebSocket @ServerEndpoint 启用 WSS

c# - .NET 网络套接字返回 200 错误

node.js - 如何在 Linux 上的 npm 上修复连接 ENETUNREACH

javascript - 获取当前对象中先前对象的值