('connect')错误的NodeJS事件

最近我开始用“Node.js in Action”一书来学习Node.js。 在这一章中有以下列表:

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

我跑了代码:

 node chat_server.js 

然后打开新的terminal并连接到chat_sever:

 telnet 127.0.0.1 8888 

然后再次打开新的terminal窗口并连接到chat_server。 这本书说:

“如果你打开几条命令行,你会发现任何input到一个命令行的东西都会被回显给其他人。”

我尝试input一个terminal,但没有任何回音。 有什么可以成为问题? 我正在运行Ubuntu 12.04

编辑:

我试图debugging这个部分:

 client.on('connect', function () { console.log('joined ' + id); channel.emit('join', id, client); }); 

但即使打开了几个terminal,也不显示“join消息”。

Solutions Collecting From Web of "('connect')错误的NodeJS事件"

我通过这个SO问题的帮助解决了我的问题:

在服务器端,当你得到callback的时候,套接字已经被连接,而你试图收听的事件不会在已经连接的套接字上发出。

所以,我在client.on('connect')之外发出'join'。 换句话说这个代码:

 client.on('connect', function () { channel.emit('join', id, client); }); 

什么也没做。 它必须被replace为:

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