Nodejs – 简单回声服务器不工作

我无法弄清楚为什么我不能写出来的sockets。 我不知道我的事件侦听器是否正确创build。 我正在尝试学习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); 

当我们build立一个connect作为一个客户端的时候,socket的connect事件只能在我的理解中发出; 但是你在这里做一个服务器。 当net.createServer的callback被调用时,你已经连接到套接字,所以即使connect事件被发射,你也会用socket.on('connect', ...太晚了。

反过来,由于connect的callback没有被调用,所以你永远不会在事件通道上发送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){ ... 

使用console.log来看看发生了什么,也许是一个稍微简单的例子,例如: http : //nodejs.org/api/net.html#net_net_createserver_options_connectionlistener

另外,请考虑使用http://socket.io/ ,这使得很多networking的东西更容易和更强大。 使用套接字,您可以执行如下操作:

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

并获得很多关于服务器的很好格式化的debugging信息以及它在做什么(注意启用这个debugging信息的{log: true} )。