Нельзя развернуть два отдельных сервера, если каждому из них требуется порт. Вы должны будете поместить их в отдельные приложения. В некоторых случаях вы можете комбинировать веб-серверы. Развертывание сервера выполняется в обычном режиме.
При развертывании веб-службы в Heroku Heroku предоставляет вам порт, к которому необходимо подключиться. Затем вы можете посетить свой веб-сервис под <appname>.herokuapp.com
. (<- вот почему 1.) требует, чтобы вы помещали их в отдельные приложения.). Кроме того, когда вы подключаетесь к веб-сервису, вы просто указываете URL. Этот URL автоматически переводится на <code><ipaddress>:<port>. Так что в вашем интерфейсе вы не собираетесь указывать номер порта. Вы указываете URL-адрес веб-сокета в своем веб-интерфейсе без порта.
На веб-сервере вы привязываете к process.env.PORT
.
.env файл, который не должен быть версионирован / зафиксирован. Бесполезно Если вам требуются переменные среды, вы можете установить их через панель управления Heroku. Procfile
не требуется, так как вы используете Node.js, он изучит ваш скрипт npm start
, расположенный в package.json
. Но это не помешает, поскольку дает ясность.
Для этого нет мульти-билда.
Если ваши 2 сервера строго различны и используют отдельные протоколы. Один использует http, другой можно объединить два сервера в один. Вот пример:
const http = require('http');
const path = require('path');
const express = require('express');
const WSServer = require('ws').Server;
const DateFormat = require('dateformat');
let wss;
let server;
const app = express();
app.use(express.static(path.join(__dirname, './../build')));
server = new http.createServer(app);
wss = new WSServer({ server })
this.wss = wss;
wss.on('connection', function(socket) {
console.log(DateFormat(new Date(), 'm/d h:MM:ss TT'),
`client connected to server (${wss.clients.size} total)`);
socket.on('message', function(data) {
console.log(data)
});
socket.on('close', function(code, desc) {
console.log(DateFormat(new Date(),
"h:MM:ss TT"),'client disconnected, total:', wss.clients.length);
});
});
wss.on('listening', () => console.log('Websocket listening on port', config.get('port')));
wss.on('error', err => console.log('Websocket server error:', err));
server.on('error', err => console.log('Server error:', err));
server.listen(process.env.PORT);
Пример в проекте:
https://github.com/vegeta897/d-zone/blob/63730fd7f44d2716a31fcae55990d83c84d5ffea/script/websock.js
В проекте серверная часть с сервером веб-сокетов была расширена и теперь включает сервер express, обслуживающий файлы stati c. Обратите внимание, что это изменение существует только в ветке heroku.
В этом коммите вы найдете все соответствующие изменения, которые сделали этот проект heroku совместимым:
https://github.com/vegeta897/d-zone/commit/63730fd7f44d2716a31fcae55990d83c84d5ffea