Node.js 如何分别部署Express Server和React应用程序,通过WebSocket/WebSocketServer连接
我正在开发一个国际象棋应用程序,与其他人在线对弈 我有一台Express服务器,我在其中对服务器进行了如下布局:Node.js 如何分别部署Express Server和React应用程序,通过WebSocket/WebSocketServer连接,node.js,reactjs,express,heroku,websocket,Node.js,Reactjs,Express,Heroku,Websocket,我正在开发一个国际象棋应用程序,与其他人在线对弈 我有一台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.l
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}
)
}
我已经在本地主机上测试了WebSocket连接,React应用程序在3000上运行,服务器在3001上运行,并将React应用程序中的连接替换为
const connection = new WebSocket(document.location.origin.replace(/^http/, 'ws').replace('3000', '3001'))
而且效果很好
我遇到的问题是,一旦部署了它们,就能够将客户端指向服务器上的正确源。如果我需要包含新的WebSocket(`ws://heroku domain.com:${PORT}`)
,如果是这样的话,我如何获得正确的端口号,因为它是由heroku动态提供的
我的想法是在服务器上创建一个api路由来检索正确的端口号,然后将其植入WebSocket参数中
还有比这更干净的方法吗?WebSocket在标准http和https端口80和443上运行。在大多数情况下,您可以不使用该选项。因此,在这种情况下,
const connection=new WebSocket(“ws://heroku domain.com”)
应该可以正常工作吗?由于我无法获得连接,因此没有收到任何错误消息,但是connection.onopen代码从未运行。不过,它现在对我有效,谢谢您的帮助。:)