網(wǎng)絡(luò)線程和工作線程

和客戶端和機(jī)器人通訊使用老的網(wǎng)絡(luò)的多線程框架。三個(gè)半事件從網(wǎng)絡(luò)發(fā)起到工作線程,進(jìn)入腳本處理后經(jīng)由工作線程發(fā)送。

(實(shí)際上網(wǎng)絡(luò)線程將消息通過(guò)nanomsg發(fā)送給gameserver,gameserver工作線程腳本lua處理。lua發(fā)送通過(guò)nanomsg發(fā)回給gate的工作線程。gate收到后在通過(guò)舊的網(wǎng)絡(luò)在工作線程直接發(fā)送給客戶端或者機(jī)器人)


為了腳本對(duì)應(yīng)的對(duì)象能夠快速訪問(wèn)網(wǎng)絡(luò),通過(guò)id來(lái)索引。使用vector高效一些。

不適用對(duì)象的依賴是因?yàn)橐每臻g和生存期管理空間不一致,恐怕異常。

比如說(shuō)腳本保留了socket的引用,但是c++已經(jīng)刪除了。繼續(xù)直接訪問(wèn)就會(huì)crash。

因此是用index通過(guò)vector查找來(lái)獲得socket.還是引擎負(fù)責(zé)生存期。刪除的時(shí)候?qū)osition緩存,在新的鏈接過(guò)來(lái)的時(shí)候重新啟用id。類似id池。

網(wǎng)絡(luò)增加和刪除鏈接,管理每個(gè)鏈接對(duì)應(yīng)的索引。因?yàn)楣ぷ骶€程需要發(fā)送,所以也需要socket,腳本放出id需要快速找到socket使用。

網(wǎng)絡(luò)管理生存期。網(wǎng)絡(luò)線程立刻處理自己的消息,并通知工作線程。其中刪除工作將在工作線程中進(jìn)行。多線程之間使用zeromq或者nanomsg通訊,避開(kāi)lock。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容