如何解决如何通过nextjs将ssl集成到websocket中?
据我了解,如果我想使用wss
,则需要具有证书和密钥,因此我生成了两个
openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 100 -nodes
我有一个可以在Express中工作的代码,但不能按以下方式工作:
const server = https.createServer({
cert: fs.readFileSync('/www/wwwroot/mydomain/cert/cert.pem'),key: fs.readFileSync('/www/wwwroot/mydomain/cert/key.pem')
});
console.log(server)
const wss = new Websocket.Server({ server })
server.listen(8082)
如何在nextjs中运行wss
?
解决方法
似乎您可能会分两部分回答:
- 如何在NextJS中设置套接字api
- 如何使用pem文件验证该api
如何在NextJS中设置套接字api
与往常一样,我将带您转到该项目的示例。他们真的很好,过去解决了我很多问题。
在这种情况下,我没有找到有关网络套接字的任何示例,但是经过一番挖掘,我找到了这个示例。
如何使用pem文件验证该API
使用上面的示例和您的auth逻辑,您应该能够在告诉NextJs做什么之前,在WSS服务器周围进行所有操作。
您的wssServer逻辑将定义可能的操作,而NextJsServer就像中间人一样,定义将哪些查询放在何处。
// server.js
const app = require('express')()
const server = require('http').Server(app)
const io = require('socket.io')(server)
const next = require('next')
const port = parseInt(process.env.PORT,10) || 3000
const dev = process.env.NODE_ENV !== 'production'
const nextApp = next({ dev })
const nextHandler = nextApp.getRequestHandler()
// fake DB
const messages = {
chat1: [],chat2: [],}
// socket.io server
io.on('connection',socket => {
socket.on('message.chat1',data => {
messages['chat1'].push(data)
socket.broadcast.emit('message.chat1',data)
})
socket.on('message.chat2',data => {
messages['chat2'].push(data)
socket.broadcast.emit('message.chat2',data)
})
})
nextApp.prepare().then(() => {
app.get('/messages/:chat',(req,res) => {
res.json(messages[req.params.chat])
})
app.get('*',res) => {
return nextHandler(req,res)
})
server.listen(port,err => {
if (err) throw err
console.log(`> Ready on http://localhost:${port}`)
})
})
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。