Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/421.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript (';connect';上的NodeJS事件错误_Javascript_Node.js - Fatal编程技术网

Javascript (';connect';上的NodeJS事件错误

Javascript (';connect';上的NodeJS事件错误,javascript,node.js,Javascript,Node.js,最近,我开始学习Node.js和“Node.js in Action”一书。在第章中有以下列表: var events = require('events'); var net = require('net'); var channel = new events.EventEmitter(); channel.clients = {}; channel.subsriptions = {}; channel.on('join', function (id, client) { this

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

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
然后打开新的终端并连接到聊天服务器:

telnet 127.0.0.1 8888
然后再次打开新的终端窗口并连接到聊天室服务器。书上说:

“如果打开几个命令行,您将看到输入的任何内容 一个命令行与其他命令行相互呼应。”

我试着在一个终端上打字,但在其他终端上没有回音。有什么问题吗?我正在运行Ubuntu 12.04

编辑:

我尝试调试此部分:

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

但即使我打开多个终端,它也不会显示“已加入消息”。

我通过以下帮助解决了问题:

在服务器端,当您获得 回调,并且您尝试侦听的事件不会在 已连接的套接字

因此,我在client.on('connect')外部发出了“join”。换言之,此代码:

client.on('connect', function () {
        channel.emit('join', id, client);
    });
什么也不做。它必须被以下内容所取代:

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

您可以使用console.log从chat_server.js进行调试。快速看一下,我想说的是,该消息并没有广播给所有用户