Экспресс js и сокет io port 3000 уже - PullRequest
0 голосов
/ 14 июня 2019

Я пытаюсь следовать руководству по использованию socket.io с каркасом express.js и node.js.

В каждом учебном пособии, которому я следую, предлагается использовать следующие строки для установления соединения в app.js

var server = require('http').createServer(app);
var io = require('socket.io')(server);
server.listen(3000);


io.on('connection', function(client) {
   console.log('Client connected...');

   client.on('join', function(data) {
     console.log(data);
  });
})

Это сработало, если я использую порт, отличный от 3000, на котором мне нужно запустить приложение на http://localhost:3000/. Я получаю сообщение об ошибке, что порт 3000 уже используется.

После отладки и просмотра кода, я думаю, у меня есть представление о том, почему это происходит. В файле ./bin/www.js (создан автоматически с помощью Express JS) у нас есть следующие строки:

/**
* Get port from environment and store in Express.
*/

var port = normalizePort(process.env.PORT || '3000');
app.set('port', port);
var server = http.createServer(app);
server.listen(port);

но я не уверен, как повторно использовать этот созданный сервер с тем же портом в моем app.js. Я совершенно новичок в node.js. Как правильно настроить socket io на платформе Express?

Ответы [ 2 ]

1 голос
/ 14 июня 2019

привет, пожалуйста, поставьте свой server.listen после сокетного соединения, как это

var app=require('expess')();
var server = require('http').createServer(app);
var io = require('socket.io')(server);

io.on('connection', function(client) {
   console.log('Client connected...');

   client.on('join', function(data) {
     console.log(data);
  });
})
server.listen(3000);

Я надеюсь, что это будет работать. Спасибо

0 голосов
/ 14 июня 2019

Чтобы убить любой существующий процесс узла, вы можете запустить команду killall node в вашей оболочке.

Удалите эту строку из своего кода, который жестко кодирует номер порта -

server.listen(3000);

и добавьте что-то вроде этого -

app.set('port', process.env.PORT || 3000);

app.listen(app.get('port'));

То есть ваш код будет выглядеть примерно так:

var server = require('http').createServer(app);
var io = require('socket.io')(server);
// server.listen(3000);
app.set('port', process.env.PORT || 3000);


io.on('connection', function(client) {
   console.log('Client connected...');

   client.on('join', function(data) {
     console.log(data);
  });
});

server.listen(app.get('port'));

Теперь, когда вы снова запустите свое приложение, оно будет загружаться на порт 3000 по умолчанию, или вы можете передать переменную среды (PORT) при запуске такого сервера для запуска на других портах.

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