Подтвердить что ты не робот

Nodejs & socket io: warn - ошибка: Ошибка: прослушивание EADDRINUSE

Я пытаюсь выполнить Node.js с socket.io

Теперь вот мой сценарий, я - пользователь ubuntu 12.04, и у меня есть папка pp на рабочем столе

внутри, что я поставил файл сервера i.e app.js

Вот содержание

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

Теперь в той же папке у меня есть еще один файл index.html, например

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

когда я пытаюсь запустить app.js, используя node как

 node app.js 

Я получаю сообщение об ошибке

 warn  - error raised: Error: listen EADDRINUSE

Я просматриваю какой-то документ и обнаружил, что порт занят, поэтому перезапустил систему, но все же я получаю ту же ошибку.

Скажите, пожалуйста, что я могу сделать неправильно.

4b9b3361

Ответ 1

Попробуйте другой порт. 8080 обычно используется tomcat, например.

Используйте netstat -a -v, чтобы узнать, какой порт используется в данный момент.

Ответ 2

Мне кажется, что вы не подключаетесь к хосту на стороне клиента:

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

Ответ 3

Вы не подключаетесь к своему серверу, это неправильно:

var iosocket = io.connect();

это правильно:

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

Также ваш порт 8080 используется на вашем сервере с помощью "http-proxy", попробуйте другой порт.

Ответ 4

Ультра-глупая/простая возможность состоит в том, чтобы убедиться, что у вас нет нескольких окон терминала. Я получил эту ошибку и понял, что у меня есть второе ранее существовавшее соединение, с которым я начал свое приложение. Когда я закрыл его и перезапустил приложение, ошибка исчезла.

Ответ 5

Вот пример для новичков о том, как вы можете настроить NodeJS + Express + SocketIO, чтобы во второй раз, когда вы запускаете приложение, у вас нет ошибки EADDRINUSE:

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

Я думаю, что это полезный пример, и я надеюсь, что это поможет кому-то, кто столкнулся с проблемой, задав все это.