Koa混合Socket.io实现数据检测工具(debug.js)
kevin.Zhu 发布于:2017-5-15 18:12 分类:Nodejs 有 13 人浏览,获得评论 0 条
/** * debug 服务,用于在新端口输出debug信息 * Created by zhukf on 2017/5/15. */ var m_koa = require('koa') ; var m_serv = require('koa-static') ; var m_cors = require('koa-cors'); var m_router = require('koa-router')() ; var m_moment = require('moment')() ; var debug = { disable:[ {type:'3', action:5}, ], port: 1120, dbg_port: 1121, running: 0, io:'', sock:null, //记录bug init: function(dbg_enabled ){ if(!dbg_enabled ){ return false; } var self = this ; //启动debug服务 var start_debug_serv = function () { //第一次运行 ,创建一个http服务、一个socket服务 if(!self.running) { //debug 路由 // m_router.get('/debug.html', function *(next ){ // // } ) ; //http服务 var app = new m_koa() ; var debug_root = __dirname + '/' ; var server = m_serv(debug_root) ; app.use(m_cors() ).use(server).use(m_router.routes()).use(m_router.allowedMethods() ) ; app.listen(self.port, function () { console.log('Debug server running at port :' + self.port ); }) ; //socket服务 var app2 = new m_koa() ; var socket_serv = require('http').createServer(app2.callback() ) ; self.io = require('socket.io')(socket_serv) ; //用于保存当前连接socket实例 self.io.sockets.on('connection', function(socket){ var now = m_moment.format('YYYY-MM-DD H:mm:ss') ; self.sock = socket ; //会在后面直接被调用发送 zkf console.log(now + ': New client connected') ; var send_msg = now + ': socket connected' ; socket.emit('connected', send_msg) ; }) ; //启动socket监听 socket_serv.listen(self.dbg_port , function(){ console.log('Debug port is: ' + self.dbg_port ) ; self.running = 1 ; }) ; } } //首次运行将会 启动一个http服务 一个socket服务 start_debug_serv() ; }, log: function (dbg_enabled, target, msg) { var target = JSON.stringify(target) ; var target = JSON.parse(target) ; var unlisten = 0; for(var i in this.disable) { var item = this.disable[i] ; var match1=0, match2 = 0; if(item.type != '') { if(target.type == item.type) match1 = 1 ; }else match1 = 1 ; if(item.action != '') { if(target.action == item.action) match2 = 1 ; }else match2 = 1 ; if(match1 == 1 && match2 == 1) { unlisten = 1 ; break ; } } if(unlisten == 1 ) { return false ; } if(this.sock == null ) { console.log('No client is connected!') ; return false ;} this.sock.emit('debug-data', target, msg); } } exports.debug = debug ;