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