2013-02-01 31 views
12

Tôi đưa ra một cố gắng để Node.js với socket.ioNodejs & ổ cắm io: cảnh báo - Lỗi nâng lên: Lỗi: nghe EADDRINUSE

Bây giờ ở đây là kịch bản của tôi là ubuntu 12.04 người dùng và tôi có thư mục pp trên máy tính để bàn

bên trong mà tôi đang putted tập tin máy chủ tức là app.js

Dưới đây là nội dung

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); 
    }); 
}); 

Bây giờ trong cùng một thư mục tôi có một file index.html như

<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> 

khi tôi đang cố gắng để chạy app.js useing nút như

node app.js 

Tôi nhận được lỗi

warn - error raised: Error: listen EADDRINUSE 

tôi đi qua một số doc và thấy cổng đó đang bận rộn vì vậy khởi động lại hệ thống nhưng tôi vẫn nhận được lỗi tương tự.

Hãy cho tôi biết tôi có thể làm gì sai.

+0

Hãy thử một cổng khác - có thể '8080' được một số ứng dụng khác sử dụng. – pimvdb

+0

Tôi thực sự gặp vấn đề này, tôi không thể tìm thấy giải pháp nào. – Tarek

+0

có vẻ như tôi không chỉnh sửa cổng trong tệp server.js, vì vậy tôi đã thông qua lỗi, nhưng bây giờ tôi không thể kết nối với nó một cách chính xác. – Tarek

Trả lời

6

Hãy thử một cổng khác. 8080 thường được sử dụng bởi tomcat, v.d.

Sử dụng netstat -a -v để biết cổng nào hiện đang được sử dụng.

+0

vẫn nhận được cùng một – masterofdestiny

+0

bạn có thể in đầu ra của 'netstat -a -v' hoặc' nmap localhost'. – Charles

+0

nmap localhost 22/tcp mở ssh 25/tcp mở smtp 53/tcp miền mở 110/tcp mở pop3 139/tcp mở netbios-SSN 143/tcp mở imap 445/tcp mở microsoft-ds 631/tcp mở ipp 993/tcp imaps mở 995/tcp mở pop3s 3306/tcp mở mysql 8080/tcp mở http-proxy – masterofdestiny

1

Có vẻ với tôi rằng bạn không kết nối với các máy chủ trên các mặt hàng:

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

bạn là đúng nhưng vấn đề này là từ phía máy chủ nếu tôi không sai – masterofdestiny

+0

thay vì 'res.end (fs.readFileSync (__ dirname + '/index.html'));' use ' readFile' – ashley

1

Bạn chưa kết nối với máy chủ của bạn, điều này là sai:

var iosocket = io.connect(); 

đây là đúng:

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

Cổng 8080 của bạn cũng được sử dụng trên máy chủ của bạn bằng "proxy http", hãy thử cổng khác.

1

Khả năng cực kỳ ngớ ngẩn/đơn giản là đảm bảo bạn không có nhiều cửa sổ đầu cuối mở. Tôi đã nhận được lỗi này và nhận ra rằng tôi đã có một kết nối đã tồn tại từ trước mà tôi đã khởi động ứng dụng của mình. Khi tôi đóng nó và khởi động lại ứng dụng lỗi đã biến mất.

+0

Tôi đã mở Putty và WinSCP và giữ lỗi EADDRINUSE; khi tôi đóng cả hai và khởi động lại chỉ Putty, tôi đã có thể bắt đầu nút - txs. – Data

0

Dưới đây là một ví dụ cho người mới bắt đầu như thế nào bạn có thể thiết lập NodeJS + Express + SocketIO để bạn không có lỗi EADDRINUSE lần thứ hai bạn bắt đầu ứng dụng của bạn:

'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); 
}); 

Tôi nghĩ rằng đây là một hữu ích Ví dụ và tôi hy vọng nó sẽ giúp ai đó gặp phải một vấn đề thiết lập này tất cả lên.

Các vấn đề liên quan