Heroku Развертывание NodeJS и ReactJS - PullRequest
2 голосов
/ 20 апреля 2019

Я хочу развернуть 2 отдельных проекта на одном компьютере Heroku. У меня есть приложение React для внешнего интерфейса и сервера nodejs сзади.

Они связаны через локальный узел в моей машине со следующей структурой. На стороне реакции, со следующей структурой клиента, я вижу, что напечатано Connected to : localhost:5000. :

import openSocket from 'socket.io-client';
socket = openSocket("http://localhost:5000");    
socket.on("connect", () => {
    console.log("Connected to : http://localhost:5000");
});

Сторона узла похожа на следующую, и на моем локальном компьютере печатается Client connected:

const server = require('http').createServer();
const io = require('socket.io')(server);
server.listen(5000, function(err) {
    if (err) throw err;
    console.log('Server Listening on port:', 5000);
});
io.on('connection', (client) => {
    console.log("Client connected!");
}

После этого я развернул свои проекты в 2 разных кластерах в Heroku. NodeJS работает на https://<herokuname>.herokuapp.com/ Поэтому мне интересно, что написать в методе openSocket на стороне React для подключения socketio соединения в этом домене. Я пробовал следующие, но ни один из них не работал:

https://<herokuname>.herokuapp.com:5000/socket.io/?EIO=4&transport=websocket

https://<herokuname>.herokuapp.com/socket.io/?EIO=4&transport=websocket

ws://<herokuname>.herokuapp.com:5000/socket.io/?EIO=4&transport=websocket

ws://<herokuname>.herokuapp.com/socket.io/?EIO=4&transport=websocket

1 Ответ

1 голос
/ 20 апреля 2019

Вы должны привязать свой сервер к определенному process.env.PORT, предоставленному вам Heroku для веб-динамов.

const server = require('http').createServer();
const io = require('socket.io')(server);
const PORT = process.env.PORT || 5000;
server.listen(PORT, function(err) {
    if (err) throw err;
    console.log('Server Listening on port:', PORT);
});
io.on('connection', (client) => {
    console.log("Client connected!");
}

Как только это сработает, вы сможете просто подключиться к URL-адресу корневого сервера heroku со своего клиента.

import openSocket from 'socket.io-client';
const url = "https://<herokuname>.herokuapp.com"
socket = openSocket(url);    
socket.on("connect", () => {
    console.log("Connected to:", url);
});

Вот несколько соответствующих документов по теме, отметив, что вы, вероятно, захотите включить сессионную сессию, если планируете использовать socket.io в heroku:

https://devcenter.heroku.com/articles/dynos#local-environment-variables https://devcenter.heroku.com/articles/session-affinity

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...