Nodejs - 简单的Echo Server无法正常工作

时间:2014-04-25 21:09:53

标签: javascript node.js

我无法弄清楚为什么我不能写出来。我不知道我的事件监听器是否正确创建。我正在尝试学习Nodejs,我是javascript的新手。

var events = require('events');
var net = require('net');
var channel = new events.EventEmitter();

channel.on('join', function(socket){

    this.on('broadcast',function(data){
        socket.write(data);
    });

});

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

    socket.on('connect',function(){
        channel.emit('join',socket);

    });

    socket.on('data',function(data){
        data = data.toString();
        channel.emit('broadcast',data);
    });
});

server.listen(8888);

2 个答案:

答案 0 :(得分:5)

当您将连接建立为客户端时,仅在我的理解中发出套接字的connect事件;但是你在这里做服务器。当调用net.createServer中的回调时,您已经连接到套接字,因此即使发出了connect事件,您也会在socket.on('connect', ...订阅它时太晚。

反过来,由于未调用connect的回调,因此您永远不会在事件通道上发出join事件,也永远不会注册broadcast事件处理程序和{{永远不会调用1}}语句。正如所指出的,一些socket.write语句可以帮助您找出实际执行的代码并缩小问题范围。

你可以通过简单地移除console.log并在外部函数中正确地执行它来解决这个问题,即

socket.on('connect', ...

答案 1 :(得分:-1)

使用console.log查看正在进行的操作,可能是一个稍微简单的示例,例如: http://nodejs.org/api/net.html#net_net_createserver_options_connectionlistener

另外,请考虑使用http://socket.io/,这会让很多网络内容更容易,更强大。使用套接字,您可以执行以下操作:

var io = require('socket.io').listen(8888, {log : true});

并获得大量格式良好的有关服务器的调试信息以及它正在做什么(请注意启用此调试信息的{log: true})。