2013-02-01 11 views
12

sto dando una prova per Node.js con socket.ioNodejs & presa io: mettere in guardia - errore generato: Errore: ascolta EADDRINUSE

Ora qui è il mio scenario io sono ubuntu 12.04 utente e devo pp cartella tavolo

all'interno che sto putted file server cioè app.js

Ecco il contenuto

var fs = require('fs') 
    , http = require('http') 
    , socketio = require('socket.io'); 

var server = http.createServer(function(req, res) { 
    res.writeHead(200, { 'Content-type': 'text/html'}); 
    res.end(fs.readFileSync(__dirname + '/index.html')); 
}).listen(8080, function() { 
    console.log('Listening at: http://localhost:8080'); 
}); 

socketio.listen(server).on('connection', function (socket) { 
    socket.on('message', function (msg) { 
     console.log('Message Received: ', msg); 
     socket.broadcast.emit('message', msg); 
    }); 
}); 

Ora nella stessa cartella che ho un altro file index.html come

<html> 
<head> 
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script> 
    <script src="/socket.io/socket.io.js"></script> 
    <script> 
     $(function(){ 
      var iosocket = io.connect(); 

      iosocket.on('connect', function() { 
       $('#incomingChatMessages').append($('<li>Connected</li>')); 

       iosocket.on('message', function(message) { 
        $('#incomingChatMessages').append($('<li></li>').text(message)); 
       }); 
       iosocket.on('disconnect', function() { 
        $('#incomingChatMessages').append('<li>Disconnected</li>'); 
       }); 
      }); 

      $('#outgoingChatMessage').keypress(function(event) { 
       if(event.which == 13) { 
        event.preventDefault(); 
        iosocket.send($('#outgoingChatMessage').val()); 
        $('#incomingChatMessages').append($('<li></li>').text($('#outgoingChatMessage').val())); 
        $('#outgoingChatMessage').val(''); 
       } 
      }); 
     }); 
    </script> 
</head> 
<body> 
Incoming Chat: <ul id="incomingChatMessages"></ul> 


<input type="text" id="outgoingChatMessage"> 
</body> 

quando sto cercando di eseguire le app.js useing nodo come

node app.js 

sto ottenendo l'errore

warn - error raised: Error: listen EADDRINUSE 

vado attraverso alcuni doc e ha scoperto che la porta sono occupati così riavviato il sistema, ma sto ricevendo lo stesso errore.

Per favore dimmi cosa potrei fare di sbagliato.

+0

Provare un'altra porta - probabilmente '8080' viene utilizzato da qualche altra applicazione. – pimvdb

+0

sto davvero avendo questo problema, non riesco a trovare alcuna soluzione. – Tarek

+0

sembra che non ho modificato la porta nel file server.js, quindi ho passato l'errore, ma ora non riesco a collegarmi correttamente. – Tarek

risposta

6

Provare un'altra porta. 8080 viene solitamente utilizzato da tomcat, ad es.

Utilizzare netstat -a -v per sapere quale porta è attualmente utilizzata.

+0

ottenendo sempre lo stesso – masterofdestiny

+0

puoi stampare l'output di 'netstat -a -v' o' nmap localhost'. – Charles

+0

nmap localhost 22/tcp aperto ssh 25/tcp aperta SMTP 53/tcp aperta dominio 110/tcp aperta pop3 139/TCP aperte netbios-SSN 143/tcp aperta IMAP 445/TCP aperte microsoft-ds 631/tcp ipp aperto 993/tcp imaps aperti 995/tcp pop3s aperti 3306/tcp aperta mysql 8080/tcp aperto http-proxy – masterofdestiny

1

Mi sembra che il tuo non la connessione all'host sul lato client:

var iosocket = io.connect('http://localhost:8080'); 
+0

hai ragione, ma questo problema è da un lato server, se non sbaglio – masterofdestiny

+0

invece di 'res.end (fs.readFileSync (__ dirname + 'index.html'));' 'uso readFile' – ashley

1

Non si connette al server, questo è sbagliato:

var iosocket = io.connect(); 

questo è giusto:

var iosocket = io.connect('http://localhost:8080'); 

Anche la porta 8080 viene utilizzata sul server da "http-proxy", provare un'altra porta.

1

Un'ultra-semplice/semplice possibilità è assicurarsi che non siano aperte più finestre di terminale. Ho ricevuto questo errore e ho realizzato che avevo una seconda connessione preesistente con la quale avevo avviato la mia app. Quando l'ho chiuso e ho riavviato l'app, l'errore è andato via.

+0

Ho aperto Putty e WinSCP e ho continuato a ricevere l'errore EADDRINUSE; quando ho chiuso entrambi e riavviato solo Putty, sono stato in grado di avviare node - txs. – Data

0

Ecco un esempio per i principianti di come è possibile impostare NodeJS + espresso + SocketIO in modo da avere nessun errore EADDRINUSE per la seconda volta che si avvia la vostra applicazione:

'use strict'; 

// Init 
var http = require('http'); 
var express = require('express'); 
var socketIO = require('socket.io'); 
var cors = require('cors'); 

// Create Server app 
var app = express(); 
var server = http.createServer(app); 
var io = socketIO(server); 

// Socket.io settings 
io.set('browser client minification', true); 
io.set('browser client etag', true); 
io.set('browser client gzip', true); 
io.set('browser client expires', true); 

// Starting Express server 
server.listen(serverPort, function() { 
    console.log(chalk.green('Server is running on localhost:' + serverPort + '...')); 
}); 

// Middleware 
app.use(cors()); 

// Routes 
app.get('/', function(req, res) { 
    res.send("Hello world!"); 
    console.log("Root visited!"); 
    // Broadcast socketIO message inside Express 
    io.emit('new_message', "Hello world!"); 
}); 

// Socket.io 
var connections = []; 
var title = "Untitled"; 

io.sockets.on('connection', (socket) => { 

    socket.once('disconnect',() => { 
     connections.splice(connections.indexOf(socket), 1); 
     socket.disconnect(); 
     console.log('Disconnected: %s. Remained: %s.', socket.id, connections.length) 
    }); 

    // ... 

    connections.push(socket); 
    console.log('Connected: %s. Total: %s', socket.id, connections.length); 
}); 

Credo che questo sia un utile esempio e spero che possa aiutare qualcuno che ha riscontrato un problema nell'impostare tutto questo.

Problemi correlati