【发布时间】:2021-08-05 14:52:19
【问题描述】:
在过去的 2 天里,我试图让一个超级基本的 wss:// 在 NodeJS 中运行,我快疯了。我已经尝试了很多方法和库,但似乎无法将 websocket 服务器附加到 https 实例。我可以毫无问题地利用常规的旧 http 并将其附加到该实例。我的调试控制台中没有任何错误。
- 我已经创建了两个自我风格的类型证书(创建密钥 + CA,创建 CSR, 签名,使用新的服务器证书)和(创建密钥 + 自签名证书, 使用它们)。
- 我尝试通过 env var 禁用 TLS 验证: NODE_TLS_REJECT_UNAUTHORIZED="0"
- 我已经尝试过 ws 和 websocket 库以及许多不同的组合 基本 ws 创建与服务器附加方法的比较。
- 我已经搭建了一个Ubuntu 21.04的VM,安装了依赖和vscode 只是为了排除我的操作系统。同样的问题。
- 尝试使用节点版本 14 + 16。
:包部门:
"websocket": "^1.0.34",
"ws": "^8.0.0"
:server.js:
const fs = require('fs');
const WebSocket = require('ws');
//HTTPS
const https = require('https');
const server = new https.createServer({
key: fs.readFileSync('./config/certs/key.pem'),
cert: fs.readFileSync('./config/certs/cert.pem')
});
//HTTP
// const http = require('http');
// const server = new http.createServer();
const wss = new WebSocket.Server({server});
wss.on('connection', function connection(ws) {
ws.on('message', function incoming(message) {
console.log('received: %s', message);
ws.send('hello from server!, the time is: ' + timestamp());
});
});
//Helper function to create a timestamp
function timestamp() {
return (new Date)
.toISOString()
.replace(/z|t/gi, ' ')
.trim()
};
//Start the server
server.listen(3000);
我怀疑节点和依赖项之间存在一些潜在的兼容性问题或其他什么...任何建议将不胜感激。我对调试内部模块不太熟悉,所以如果有一些命令行开关我应该添加到 node/nodemon 请告诉我。我至少启用了 --inspect 和 --trace-warnings。
【问题讨论】: