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

Node.js сетевые события не срабатывают

У меня есть следующий пример прослушивания событий соединения и данных, чтобы вернуть результат обратно другим клиентам telnet, прослушивающим порт 8888. Мои сеансы telnet соединяются с locahost fine, но вывод не выводится. Я ударяю головой о кирпичную стену, пытаясь понять, что не так. Выполнение даже не доходит до события "connect".

/server.js

 var events = require('events');
    var net = require('net');
    var channel = new events.EventEmitter();
    channel.clients = {};
    channel.subscriptions = {};
    channel.on('join', function (id, client) {
        this.clients[id] = client;
        this.subscriptions[id] = function (senderId, message) {
            if (id != senderId) {
                this.clients[id].write(message);
            }
        }
        this.on('broadcast', this.subscriptions[id]);
    });
    var server = net.createServer(function (client) {
        var id = client.remoteAddress + ':' + client.remotePort;
        console.log(id);
        client.on('connect', function () {
            console.log('A new connection was made');
            channel.emit('join', id, client);
        });
        client.on('data', function (data) {
            data = data.toString();
            channel.emit('broadcast', id, data);
        });
    });

    server.listen(8888);

Затем я запускаю в командной строке

node server.js
telnet 127.0.0.1 8888
4b9b3361

Ответ 1

Когда вызывается обратный вызов net.createServer, из-за неявного события connection. Поэтому ваш код должен выглядеть так:

var server = net.createServer(function (client) {

  // when this code is run, the connection has been established

  var id = client.remoteAddress + ':' + client.remotePort;
  console.log('A new connection was made:', id);

  channel.emit('join', id, client);

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

  client.on('end', function() {
    ...
  });
});

Ответ 2

руководство говорит следующее:

net.createServer([options], [connectionListener])
Создает новый TCP-сервер. Аргумент connectionListener автоматически устанавливается в качестве слушателя для события "connection".

Другими словами, ваш function (client) { уже получил событие подключения и добавление к нему слушателя, когда оно уже отправлено, не имеет никакого эффекта.