node.js - 如何分别部署 Express Server 和 React App,通过 WebSocket/WebSocketServer 连接
问题描述
我正在构建一个国际象棋应用程序来在线对战其他人。
我有一个 Express 服务器,其中服务器的布局如下:
const PORT = process.env.PORT || 3001
const INDEX = '/index.html';
const server = express()
.use((req, res) => res.sendFile(INDEX, { root: __dirname }))
.listen(PORT, () => console.log(`Listening on ${PORT}`))
const { Server } = require('ws')
const wss = new Server({ server })
这是部署到 Heroku
我还有一个部署到 Netlify 的 React 应用程序,其中包含:
export default function Board() {
const connection = new WebSocket("ws://heroku-domain.com")
useEffect(() => {
connection.onopen = () => {
console.log('connection established')
}
connection.onmessage = (message) => {
// does stuff
}
}, [])
return (
{content}
)
}
我已经在 localhost 上测试了 WebSocket 连接,React App 在 3000 上运行,服务器在 3001 上运行,并将 React App 中的连接替换为
const connection = new WebSocket(document.location.origin.replace(/^http/, 'ws').replace('3000', '3001'))
效果很好。
我遇到的问题是,一旦我部署了它们,就能够将客户端指向服务器上的正确源。如果我需要包括new WebSocket(`ws://heroku-domain.com:${PORT}`)
,如果是这样,我如何获得正确的端口号,因为它是由 Heroku 动态提供的。
我的想法是在服务器上创建一个 api 路由以检索正确的端口号,然后将其植入 WebSocket arg 中。
还有比这更干净的方法吗?
解决方案
推荐阅读
- angular - Angular Material拖放空列表不起作用
- c# - DinkToPdf dll 未找到 libwkhtmltox
- python - 官方coinbase python api库上的请求资金错误
- excel - 数据透视表中的自定义列标签
- vert.x - Vert.x kafka 消费者在获取记录之间暂停
- python - 由于 Python 中的“引用”,assertEqual 比较 json 对象引发错误
- flutter - 根据使用导航器从 Flutter 中的上一个屏幕返回的数据更新变量
- c# - 我无法使用 Google Api 阅读收件箱电子邮件
- android - 如何用本地 jar 替换 gradle 依赖项?
- opencl - OpenCL 内核的最大细分级别