Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如何分别部署Express Server和React应用程序,通过WebSocket/WebSocketServer连接_Node.js_Reactjs_Express_Heroku_Websocket - Fatal编程技术网

Node.js 如何分别部署Express Server和React应用程序,通过WebSocket/WebSocketServer连接

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

我正在开发一个国际象棋应用程序,与其他人在线对弈

我有一台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}
    )
}
我已经在本地主机上测试了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代码从未运行。不过,它现在对我有效,谢谢您的帮助。:)