在事件环中node通过on和emit进行事件的接收和发射,笔者以简单的窗口聊天小demo来演示一下如何通过事件环来发射和监听事件并执行回掉;
var events=require('events') var net = require('net') var channel= new events.EventEmitter();//事件发射器 channel.client={}; channel.subscriptions={} channel.on("join",function(id,client){ this.client[id]=client; console.log("--------------------") var that =this; this.subscriptions[id]=(senderId,message)=>{ console.log("broadcast") that.client[id].write(message) } channel.on('broadcast',this.subscriptions[id]);//每当进入一个链接就会在事件环中添加一个监听 }) var server = net.createServer(client=>{ console.log("--------------------1") var id=client.remoteAddress+':'+client.remotePort; channel.emit("join",id,client) client.on('connect',()=>{//当用户连上 channel.emit("join",id,client)//第一个参数可以自己定义,只是一个事件的名字,除了error随便用 }) client.on('data',data=>{ data=data.toString(); channel.emit('broadcast',id,data); }) }) server.listen(8888,()=>{ console.log("I'm listening on port 8888") })
如上node程序可以监听要来的tcp链接并且通过broadcast广播到所有链接上的tcp客户端
运行上面程序然后可以用telnet 客户端尝试
关于telnet在win上的安装和使用参考
https://blog.csdn.net/msq7487223/article/details/52366148
https://jingyan.baidu.com/article/95c9d20d96ba4aec4f756154.html