NetHost::Recv方法使用专集(基于mdk1.10)
为什么将此方法特别弄一个专集,因为在通信软件领域中,数据接收一直是一个比较有复杂的事情,处理的好不好,直接影响到程序效率。 本文就是为了介绍NetHost::Recv配合mdk这套引擎,如何方便的解决了传统通信软件中在数据接收这一块上遇到的各种瓶颈 瓶颈1:等待数据的方式 循环sleep、阻塞recv、事件触发(例如select epoll) 他们的缺点 循环sleepcpu吃紧 阻塞recv占用业务线程 事件触发,不知道有多少可读数据,如果数据不完整,读出数据需要用户自己维护 NetHost的解决方案 NetHost有自己的接收缓冲,mdk引擎收到数据首先放入NetHost的接收缓冲,然后触发OnMsg。 因为底层已经在接收了,所以recv永不阻塞,数据不够直接返回,等下次数据到达时,OnMsg会再次被触发 瓶颈2:一个完整消息被分成多次到达 来1次收1次,记录上次接收状态,用户自己拼包 缺点 用户得自己维护已接收的数据,相当于一个接收缓冲,这个缓冲必须随着连接的建立与断开创建与删除,维护代价昂贵 NetHost的解决方案 NetHost::Recv比传统的recv方法增加一个bClearCache参数,告诉Recv接收到数据后,是否将数据从接收缓冲删除 bClearCache为true时,与传统recv方法效果一样,比如到达数据123456789 recv 2 byte