nodejs小程序没有得当期望的结果
谁能帮我解决一下这个问题?谢谢了
- *//程序希望的得到结果是(用telnet 127.0.0.1 8888在终端连接):打开多个终端,在其中任意一个终端输入的
- //内容都将会发送到其他窗口,我运行的时候,在一个终端输入,其他终端没有反应*
- var events = require(‘events’);
- var net = require(‘net’);
- var channel = new events.EventEmitter();
- channel.clients = {};
- channel.inputcontents = {};
- //join事件监听器用来保存连接client信息
- channel.on(‘join’, function(id, client) {
- this.clients[id] = client;
- this.inputcontents[id] = function(senderId, message) {
- //如果用户是输入信息的用户则不在终端显示
-
if( id != senderId)
-
this.clients[id].write(message);
- }
- //broadcast事件监听器用来执行显示在其他终端显示的功能
- this.on(‘broadcast’, this.inputcontents[id]);
- });
- //建立服务器,发射相关事件
- net.createServer(function (client) {
- var id = client.remoteAddress + ‘:’ +client.remotePort;
- client.on(‘connect’, function(){
-
channel.emit('join', id, client);
- });
- client.on(‘data’, function(data){
-
channel.emit('broadcast', id, data);
- });
- }).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方法被激活。需要自触发。【其实我也没仔细看你代码,讲错了不要打脸】