2015-08-12 2 views
0

Для следующего примера публикации/подписания я не могу заставить его работать. я бегу сценарий и затем я начинаю окно командной строки сСобытие «connect» не вызывается, когда клиент присоединяется

телнет 127.0.0.1 8888

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

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; 
    client.on('connect', function(){ 
     channel.emit('join', id, client); 
     console.log('joined!') 
    }); 
    client.on('data', function(data){ 
     data = data.toString(); 
     channel.emit('broadcast', id, data); 
     console.log('written'); 
    }); 
}); 

server.listen(8888); 

Я использую Windows 10 с функцией телнета общего клиента. Я также открыл порт 8888, хотя он запускается в 'localhost'

Я ничего не пропустил? Или в чем причина, потому что событие «connect» не возникает? (Это вызывает то, что channel.emit('join', id, client) никогда не выполняется

+0

Ну, этот код был взят из книги об изучении NodeJS и ожидаемый результат небольшой чат-сервер для телнет слушателей – blfuentes

+0

@KirillSlatin Где вы видите что-нибудь о WebSockets в вопросе? – mscdex

+0

@mscdex, вы правы, моя ошибка –

ответ

1

client.on('connect', ...) не имеет смысла для серверной (только на стороне клиента). Обратный вызов у ​​вас есть эта строка в то, что называется, когда клиент подключается так просто сделать это:.

var server = net.createServer(function(client){ 
    var id = client.remoteAddress + ':' + client.remotePort; 
    channel.emit('join', id, client); 
    console.log('joined!') 
    client.on('data', function(data){ 
     data = data.toString(); 
     channel.emit('broadcast', id, data); 
     console.log('written'); 
    }); 
}); 
+0

Вы правы. Я также проверил эту ссылку http: // st ackoverflow.com/questions/19342910/when-is-the-connect-event-in-nodejs-net-module-emitted. 'CreateServer' является обратным вызовом события' connect'. Если бы я это правильно понял. – blfuentes