nodejs小程序没有得当期望的结果
发布于 10 年前 作者 QuoniamYIF 3123 次浏览 最后一次编辑是 8 年前 来自 问答

谁能帮我解决一下这个问题?谢谢了

  1. *//程序希望的得到结果是(用telnet 127.0.0.1 8888在终端连接):打开多个终端,在其中任意一个终端输入的
  2. //内容都将会发送到其他窗口,我运行的时候,在一个终端输入,其他终端没有反应*
  3. var events = require(‘events’);
  4. var net = require(‘net’);
  5. var channel = new events.EventEmitter();
  6. channel.clients = {};
  7. channel.inputcontents = {};
  8. //join事件监听器用来保存连接client信息
  9. channel.on(‘join’, function(id, client) {
  10. this.clients[id] = client;
  11. this.inputcontents[id] = function(senderId, message) {
  12. //如果用户是输入信息的用户则不在终端显示
  13. if( id != senderId)
    
  14. 	this.clients[id].write(message);
    
  15. }
  16. //broadcast事件监听器用来执行显示在其他终端显示的功能
  17. this.on(‘broadcast’, this.inputcontents[id]);
  18. });
  19. //建立服务器,发射相关事件
  20. net.createServer(function (client) {
  21. var id = client.remoteAddress + ‘:’ +client.remotePort;
  22. client.on(‘connect’, function(){
  23. channel.emit('join', id, client);
    
  24. });
  25. client.on(‘data’, function(data){
  26. channel.emit('broadcast', id, data);
    
  27. });
  28. }).listen(8888);
5 回复

client.on('connect’, function(){ channel.emit(‘join’, id, client); }); 改为 channel.emit(‘join’,id,client); 具体为什么我也不懂,刚开始学习,你可以看看api里关于net.createServer()的讲解. http://nodeapi.ucdok.com/api/net.html

net包里的那些本来就是事件了,加一道好像没必要,广播的话遍历的去发送?

@phantomS4 谢谢你了,这样一改程序就可以运行了

@luoyjx 按一楼的改法,程序就可以运行了,不知道为什么,还得再看看文档

作为一个标准STREAM流实例,没有原生的connect方法被激活。需要自触发。【其实我也没仔细看你代码,讲错了不要打脸】

回到顶部