如何通过nextjs将ssl集成到websocket中?

Posted

技术标签:

【中文标题】如何通过nextjs将ssl集成到websocket中?【英文标题】:how to integrate ssl in websocket through nextjs? 【发布时间】:2020-08-19 23:14:18 【问题描述】:

我了解到,如果我想使用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

【问题讨论】:

【参考方案1】:

似乎您可能会在两部分答案之后:

如何在 NextJS 中设置 socket api 如何使用 pem 文件验证该 api

如何在 NextJS 中设置 socket api

像往常一样,我会引导您查看项目中的示例。他们真的很好,过去解决了我的很多问题。

在这种情况下,我没有找到任何 web-sockets 的示例,但经过一番挖掘后,我找到了这个示例。

https://github.com/vercel/next.js/tree/442fbfaa4d4e8205cf10c7e5d27b8f51b7a4bdc6/examples/with-socket.io

如何使用 pem 文件验证该 api

使用上面的示例和您的身份验证逻辑,您应该能够在告诉 NextJs 做什么之前围绕 WSS 服务器执行所有操作。

您的 wssServer 逻辑将定义什么是可能的,而您的 NextJsServer 就像一个中间人,定义哪些查询去哪里。

https://github.com/vercel/next.js/blob/442fbfaa4d4e8205cf10c7e5d27b8f51b7a4bdc6/examples/with-socket.io/server.js

// 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('*', (req, res) => 
    return nextHandler(req, res)
  )

  server.listen(port, err => 
    if (err) throw err
    console.log(`> Ready on http://localhost:$port`)
  )
)

【讨论】:

以上是关于如何通过nextjs将ssl集成到websocket中?的主要内容,如果未能解决你的问题,请参考以下文章

NextJS:通过上下文将字符串从输入传递到 getStaticProps

beego与websocker的集成

Nextjs 如何将多条路由映射到一个页面?

如何将道具从组件传递到 NextJS 中的 getServerSideProps()?

如何使用tailwindcss将样式文件夹移动到nextjs typescript中的src文件夹?

TailwindCSS + NextJS:集成 PostCSS 和 IE11 支持(自定义属性)