Socket.io 和 Express ERR_SSL_VERSION_OR_CIPHER_MISMATCH

how*_*hUR 3 https node.js express socket.io github-pages

我的代码托管在 GitHub Pages 上。我正在尝试通过 IP 将客户端连接到计算机的 Node.JS 服务器,但连接显示错误ERR_SSL_VERSION_OR_CIPHER_MISMATCH

这是我的服务器代码:

var app = require('express')();
var server = require('https').createServer(app);
var io = require('socket.io')(server);

app.set('port', process.env.PORT || 8080);
app.set('host', process.env.HOST || '0.0.0.0');

server.listen(app.get('port'), app.get('host'), () => {
  console.log("Express server listening IP: " + app.get('host'));
});

io.on('connection', socket => {
    socket.on('sayHi', data => {
        console.log(data.message);
    });
});
Run Code Online (Sandbox Code Playgroud)

这是客户端:

const socket = io.connect('https://myPublicIP:8080');
socket.emit('sayHi', { message: 'Hello world' });
Run Code Online (Sandbox Code Playgroud)

Quỳ*_*yễn 5

发生该错误是因为您使用 HTTPS 来运行 SocketIO Server。

所以我们有两种方法来解决这个问题:

  1. 改成require('https')require('http')
  2. 按照此示例源代码创建服务器时导入您的证书 SSL 文件

    const privateKey = fs.readFileSync(process.env.PRIVATE_KEY, 'utf8')
    const certificate = fs.readFileSync(process.env.CERTIFICATE, 'utf8')
    const credentials = {
        key: privateKey, 
        cert: certificate, 
        passphrase: process.env.PASSPHRASE
    }
    var server = require('https').createServer(credentials, app);
    
    Run Code Online (Sandbox Code Playgroud)

希望这可以帮到你!