//发布订阅 EventEmitter code // 当某配置发生变化时,通知到已订阅的客户端 void HocfgMgr::notifyChange( const string&; filename, int mtime ) const { string aliasPrefix = _F("%s_%s@", BOOK_HOCFG_ALIAS_PREFIX, filename.c_str()); CliMgr::AliasCursor alcr(aliasPrefix); CliBase *cli = NULL; vector vecCli; string msg("{"); StrParse::PutOneJson(msg, "notify", "cfg_change", true); StrParse::PutOneJson(msg, "filename", filename, true); StrParse::PutOneJson(msg, "mtime", mtime, false); msg += "}"; while ((cli = alcr.pop())) { IOHand* iohand = dynamic_cast(cli); if (NULL == iohand) { LOGWARN("NOTIFYCHANGE| msg=book from ocli| cli=%s| file=%s", cli->m_idProfile.c_str(), filename.c_str()); continue; } iohand->sendData(CMD_EVNOTIFY_REQ, ++m_seqid, msg.c_str(), msg.size(), true); } }
点赞 1

相关推荐

看着牛友的八股轰炸感觉还好,真到了自己就一点都不会了算是第一次遇到不怎么给你留情面的面试官了,这次是真的有阴影了,我打算放弃回炉重造了还发现一个绝望的消息,面评不一定只跟手机号绑定,因为这个面试官看到了我上一个手机号的面评。---面试直接提前十分钟开始了1. 追问自我介绍中的优势。你理解的软件开发流程是怎样的?你学到了哪些代码规范和工程实践?饶了半天一个非常纠结的问题,让我自己预估一下自己有多少代码量,硬要我估一个,不知道是何用意2. OOP有哪些设计原则?紧接着场景:如果有一个历史包袱很重的项目,你会注意哪些事情,开放回答。3. 进程和线程区别?为什么要有线程这个东西,如何理解?有哪些线程中断方式和调度算法?有哪些进程间通信手段?4. HTTP 三个版本的区别?3是怎么解决队头阻塞的?5. 挥手为什么比握手多一次?如何理解TCP建立连接的这种状态?他是一个什么思想?这个时候已经准备结束了4. 力扣刷了多少题了?还是做个算法题吧:对称二叉树。建树算法没写出来,二叉树从来没写过acm模式,在那坐了十多分钟神仙。还有什么问题吗?我说我还有一个解法。面试官说一个够了。面了半小时不到---反思:这几次面试基本所有的问题都暴露完了,这次就是彻底体会到基础的问题,基础不好背了八股也不能逃过追问。
点赞 评论 收藏
转发
头像
03-02 17:23
已编辑
字节跳动_后端
点赞 评论 收藏
转发
牛客网
牛客企业服务