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

Mic*_*ael 1 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);
Run Code Online (Sandbox Code Playgroud)

Mii*_*chi 5

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

反过来,由于connect未调用回调函数,因此您永远不会join在事件通道上发出事件并且永远不会注册broadcast事件处理程序,并且socket.write永远不会调用该语句.正如所指出的,一些console.log陈述可以帮助您搞清楚,实际执行的代码是什么,并缩小了问题范围.

您可以通过socket.on('connect', ...在外部函数中删除并执行正确的操作来解决此问题,即,

var server = net.createServer(function(socket){   
    console.log("connect!");
    channel.emit('join',socket);

    socket.on('data',function(data){
    ...
Run Code Online (Sandbox Code Playgroud)