Мое приложение имеет экспресс-сервер, прослушивающий один порт (process.env.PORT), а также я хочу, чтобы веб-сокет использовал другой порт. Я имел обыкновение использовать Экспресс 3 с этой установкой:Приложение NodeJS и socket.io на Heroku с 2 портами
var express = require('express'),
http = require('http'),
io = require('socket.io'),
app = express();
server = http.Server(app);
ioServer = io(server);
ioServer.on('connection', callback);
server.listen(process.env.PORT || 3000, function() {
console.log('App listening on ' + server.address().port);
});
Приведенный выше код работает отлично, как и при создании ioServer, не требуется никакого конкретного порта. Однако, после того, как я перешел на Экспресс 4 и начал использовать сервис WebSocket Heroku, я должен был указать порт, как это:
var WebSocketServer = require('ws').Server,
port = 5000,
server = http.createServer(app);
server.listen(port);
var wss = new WebSocketServer({server: server});
wss.on('connection', callback);
app.listen(app.get('port'), function() {
console.log('Express server listening.'));
});
Эта новая установка не работает, потому что, когда я запустить приложение на Heroku, я получаю ошибка жалуясь, что тот же самый порт не может быть использован дважды:
Error: listen EADDRINUSE :::40854
Абонентская до логики, по существу, то же самое для явного назначения порта в Express 4, за исключением, так почему мой код работает с экспресс 3, но не Экспресс 4? Как мне это исправить?