2015-02-25 3 views
4

Я начал использовать [cloud9] [1] и попытался разместить мое приложение nodejs. Когда я пытаюсь запустить мое приложение это бросает мне следующее сообщение об ошибке:nodejs Ошибка EADDRINUSE

Важно: используйте process.env.PORT как порт и process.env.IP как хозяин в вашем

Important: use process.env.PORT as the port and process.env.IP as the host in your scripts!                    

debugger listening on port 15454                                  
8080                                         
0.0.0.0                                         

events.js:72                                       
     throw er; // Unhandled 'error' event                               
      ^                              
Error: listen EADDRINUSE                             
    at errnoException (net.js:905:11)                         
    at Server._listen2 (net.js:1043:14)                         
    at listen (net.js:1065:10)                           
    at Server.listen (net.js:1147:9)                          
    at exports.lookup.callback (dns.js:72:18)                               
    at process._tickCallback (node.js:442:13)                               
    at Module.runMain [as _onTimeout] (module.js:499:11)                            
    at Timer.listOnTimeout [as ontimeout] (timers.js:112:15) 

мое приложение .js:

var app = require('express')(); 
//var app = express(); 
//var http = require('http'); 
var server = require('http').Server(app); 
var io = require('socket.io')(server); 
app.set('port', process.env.PORT || 3000); 
var port = app.get('port'); 
console.log(port); 
server.listen(port, process.env.IP); 
// routing 
app.get('/', function (req, res) { 
    res.sendfile(__dirname + '/index.html'); 
}); 
// usernames which are currently connected to the chat 
var usernames = {}; 
// rooms which are currently available in chat 
var rooms = []; 
io.sockets.on('connection', function (socket) { 
    socket.on('adduser', function (username, room) { 
     socket.username = username; 
     socket.room = room; 
     usernames[username] = username; 
     socket.join(room); 
     socket.emit('updatechat', 'SERVER', 'You are connected. Start chatting'); 
     socket.broadcast.to(room).emit('updatechat', 'SERVER', username + ' has connected to this room'); 
    }); 
    socket.on('createroom', function() { 
     var new_room = (""+Math.random()).substring(2,7); 
     rooms.push(new_room); 
     socket.emit('updatechat', 'SERVER', 'Your room is ready, invite someone using this ID:' + new_room); 
     socket.emit('roomcreated', new_room); 
    }); 
    // when the client emits 'sendchat', this listens and executes 
    socket.on('sendchat', function (data) { 
     // we tell the client to execute 'updatechat' with 2 parameters 
     io.sockets. in (socket.room).emit('updatechat', socket.username, data); 
    }); 

    // when the user disconnects.. perform this 
    socket.on('disconnect', function() { 
     // remove the username from global usernames list 
     delete usernames[socket.username]; 
     // update list of users in chat, client-side 
     io.sockets.emit('updateusers', usernames); 
     // echo globally that this client has left 
     if(socket.username !== undefined){ 
      socket.broadcast.emit('updatechat', 'SERVER', socket.username + ' has disconnected'); 
      socket.leave(socket.room); 
     } 
    }); 
}); 

Я попытался ищет любой процесс уже запущен в 8080, это выход

[email protected]_room:~/workspace (master) $ ps ax | grep node 
14154 pts/1 S+  0:00 grep --color=auto node 

Если я попробовать использовать другой порт, то я не получаю файл сокета, он выдает мне ошибку 404:

<script src="/socket.io/socket.io.js"></script>

Это прекрасно работает в местном.

EDIT Открытые порты:

[email protected]_room:~/workspace (master) $ netstat --listen 
Active Internet connections (only servers) 
Proto Recv-Q Send-Q Local Address   Foreign Address   State  
tcp  0  0 *:mysql     *:*      LISTEN  
tcp  0  0 localhost:17123   *:*      LISTEN  
tcp6  0  0 [::]:http-alt   [::]:*     LISTEN  
tcp6  0  0 [::]:ssh    [::]:*     LISTEN  
Active UNIX domain sockets (only servers) 
Proto RefCnt Flags  Type  State   I-Node Path 
unix 2  [ ACC ]  STREAM  LISTENING  353035357 /tmp/tmux-1000/cloud91.8 
unix 2  [ ACC ]  STREAM  LISTENING  351539622 /home/ubuntu/lib/mysql/socket/mysql.sock 
unix 2  [ ACC ]  STREAM  LISTENING  352204732 /home/ubuntu/.c9/1312164/collab.sock 


[email protected]_room:~/workspace (master) $ netstat -vatn 
Active Internet connections (servers and established) 
Proto Recv-Q Send-Q Local Address   Foreign Address   State  
tcp  0  0 0.0.0.0:3306   0.0.0.0:*    LISTEN  
tcp  0  0 127.0.0.1:17123   0.0.0.0:*    LISTEN  
tcp  0  0 127.0.0.1:37186   127.0.0.1:15455   TIME_WAIT 
tcp  0  0 127.0.0.1:15454   127.0.0.1:59371   TIME_WAIT 
tcp6  0  0 :::8080     :::*     LISTEN  
tcp6  0  0 :::22     :::*     LISTEN  
tcp6  0 400 172.17.0.248:22   10.240.179.70:43154  ESTABLISHED 


[email protected]_room:~/workspace (master) $ netstat -vat 
Active Internet connections (servers and established) 
Proto Recv-Q Send-Q Local Address   Foreign Address   State  
tcp  0  0 *:mysql     *:*      LISTEN  
tcp  0  0 localhost:17123   *:*      LISTEN  
tcp  0  0 localhost:37186   localhost:15455   TIME_WAIT 
tcp  0  0 localhost:15454   localhost:59371   TIME_WAIT 
tcp6  0  0 [::]:http-alt   [::]:*     LISTEN  
tcp6  0  0 [::]:ssh    [::]:*     LISTEN  
tcp6  0  0 user-chat_:ssh 10.240.179.70:43154  ESTABLISHED 


[email protected]_room:~/workspace (master) $ lsof -i 
COMMAND  PID USER FD TYPE DEVICE SIZE/OFF NODE NAME 
mysqld  2316 ubuntu 10u IPv4 351539621  0t0 TCP *:mysql (LISTEN) 
apache2 2374 ubuntu 4u IPv6 351539675  0t0 TCP *:http-alt (LISTEN) 
apache2 2381 ubuntu 4u IPv6 351539675  0t0 TCP *:http-alt (LISTEN) 
apache2 2382 ubuntu 4u IPv6 351539675  0t0 TCP *:http-alt (LISTEN) 
apache2 2383 ubuntu 4u IPv6 351539675  0t0 TCP *:http-alt (LISTEN) 
apache2 2384 ubuntu 4u IPv6 351539675  0t0 TCP *:http-alt (LISTEN) 
apache2 2385 ubuntu 4u IPv6 351539675  0t0 TCP *:http-alt (LISTEN) 
vfs-worke 13915 ubuntu 13u IPv4 352221394  0t0 TCP localhost:17123 (LISTEN) 
+0

Какую команду вы используете для запуска на сервер Node.js? – Qualcuno

+0

'nodejs app.js' –

ответ

3

Я бы сказал, это сказал ошибка все:

Important: use process.env.PORT as the port and process.env.IP as the host in your scripts!

Ваше окружение хочет использовать process.env.PORT и process.env.IP для порта и IP соответственно (это что cloud9?), но на этой линии вы используете другую переменную окружения:

app.set('port', process.env.app_port || 8080) 

Исправление:

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

(В общем случае, ошибка EADDRINUSE это когда другой процесс прослушивания этого порта)

Для 404 ошибки

EDIT: ранее опубликованный код был для старой версии Express. См. http://socket.io/docs/#using-with-express-3/4

+0

Спасибо, но я получаю эту ошибку: express не имеет метода« createServer ». В соответствии с этим ответом http://stackoverflow.com/a/13499302/608388 Экспресс-сервер устарел. –

+0

@ntechi см. Http://socket.io/docs/#using-with-express-3/4 Я отправлял код для старой версии экспресс – Qualcuno

+0

пытался, все еще получая 404 при попытке с другим портом и ошибкой EADDRINUSE при использовании 'app.set ('порт', process.env.ПОРТ || 3000); «Мое приложение работает, если я запускаю его на другом, а затем 8080, но 404 для файла сокета. Пожалуйста, уточните мой обновленный код –

3

Возможно ли в вашем коде, что вы запрашиваете listen(), в тот же порт в двух местах вашего источника? Я не вижу двух прослушивающих звонков, но я не знаком с выражениями или сокетами, чтобы узнать, выполняет ли другая функция ... это случилось со мной однажды, хотя в другой ситуации.

0

Списка процессы, запущенные на порт 8080, используя команду: LSOF -i: 8080, С помощью функции PID запущенных процессов Убейте экземпляр, который использует порт 8080 с помощью команды: убить -9 PID

Смежные вопросы