我正在用fastify和@fastify/WebSocket编写一个node应用程序。在我使用http协议之前,它在本地和远程服务器上都能正常工作。一旦我切换到https,即使fastify继续工作(https),也无法再连接到ws/wss。这是我的代码:
节点文件:
const config = {
privKey: process.env.PRIV_KEY,
certKey: process.env.CERT_KEY,
https: (process.env.HTTPS === '1' ? true : false),
domains: process.env.DOMINI,
port: process.env.PORT
}
const fastify = config.https === false
? require("fastify")({ serverTimeout: 60 * 60 * 1000, logger: true })
: require("fastify")({
serverTimeout: 60 * 60 * 1000,
https: {
key: fs.readFileSync(config.privKey),
cert: fs.readFileSync(config.certKey),
}
});
fastify.register(require("@fastify/cors"), {
origin: config.domains,
});
const WebSocket = require('@fastify/websocket');
fastify.register(WebSocket);
fastify.register(async function (fastify) {
fastify.get('/live', { websocket: true }, (connection, request) => {
connection.socket.on('message', message => {
try {
connection.socket.send('You are connected...')
} catch(error) {
console.log(error)
}
})
});
});
const start = () => {
try {
fastify.listen({
host: '0.0.0.0',
port: config.port,
listenTextResolver: (address) => { return `Server is listening at ${address}` }
});
} catch (err) {
fastify.log.error(err);
process.exit(1);
}
};
start();
字符串
搜索我找不到任何类似的问题,也猜不出问题在哪里。即使gpt 4也帮不上忙。防火墙在tcp配置上打开。端口和证书是有效的(fastify在https上工作正常)。
它看起来像WebSocket不能检测到它运行在fastify的https上。
有什么需要帮忙的吗?谢谢
Simone
1条答案
按热度按时间2j4z5cfb1#
这个问题似乎与SSL/TLS证书有关。使用
mkcert
在本地生成证书可以使wss://
端点工作,这表明这可能是本地和开发环境的可行方法。除了使用与HTTPS设置相同的证书之外,您是否遇到过生产环境的其他解决方案?