日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

一个包的TcpServer流程

發布時間:2024/4/17 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 一个包的TcpServer流程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
上次說到對于那種有內容的包 bool TCPServer::on_receive_data(int channel_id, void* data, int len) {packet pkt;{pkt.data = m_memPool.popPkt(len);//從內存池分配len大小的內存,返回地址,此處為什么使用內存池不太清楚 }memcpy(pkt.data, data, len);pkt.size = len;pkt.channel_id = channel_id;pkt.is_data = true;from_net_push_pkt(pkt);//放到無鎖隊列中return true; }net啟動的時候會創建一個線程專門從無鎖隊列中讀包,然后放入共享內存中 bool TCPServer::recv(packet& pkt) {//((I_LibEvtServer*)m_spTCPServer[0].get())->run_once(); #ifdef BOOST_LOCKFREEif(m_all_packet.empty())return false;void* p = pkt.data;bool hr = m_all_packet.pop(pkt);if(!hr)return false;if(pkt.is_data){memcpy(p, pkt.data, pkt.size);//服務器有好多都是依照這個原理做的m_memPool.pushPkt(pkt.data, pkt.size);//歸還內存池(對于這種模式,我不太懂為什么這樣,一個線程把包放入無鎖隊列中,另一個線程從無鎖隊列中讀) }pkt.data = p;--consumer_count;return true; } 把這兩個問題搞懂,接下來就是最難的共享內存部分了,弄懂這個部分,廢大勁了

?

轉載于:https://www.cnblogs.com/zzyoucan/p/4082649.html

總結

以上是生活随笔為你收集整理的一个包的TcpServer流程的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。