[請益] 請問有關game server多線程處理的問題

看板GameDesign作者 (赤木巧☠)時間13年前 (2012/07/10 09:45), 編輯推噓1(102)
留言3則, 1人參與, 最新討論串1/1
最近在做一個game server的架構,目前是使用boost::asio做非阻塞TCP/IP連線: (考慮的是一般稍具規模MMORPG架構) io_service -----------------------+------------------------------ | | | thread1:io_service.run() thread2:io_service.run() thread3: io_service.run() io_service是boost一個處理io的接口, 並且常駐thread去執行io_service.run()來處理各類事件(accept、read、write等等)。 目前完成到這個部分沒有問題。但接下來要怎麼處理接收到的事件? 想法1:直接由接收事件的線程執行後續的處理。 缺點:結構上會比較亂,IO的線程跟server遊戲本身調用的線程無法區分開來。 並且有更多同步問題。 想法2:各thread接受資料之後放入堆疊(除了一些可以簡單即時處理的指令), 由game server的main loop(或特定線程)在正確的時機去處理(可能再開線程)。 缺點:堆疊部分的設計好壞感覺會大幅影響效率。 其他未知問題(?) 目前傾向想法2,不過這只是我沒啥經驗的想法,應該還有更好的想法3.4.5., 想請問一下實際的game server架構上面通常怎麼設計會比較理想? 可以兼顧訊息處理的效能以及線程管理的方便性。 麻煩各位前輩解惑了,感謝。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.133.45.115

07/10 10:22, , 1F
想法 1 加 coroutine
07/10 10:22, 1F

07/10 10:23, , 2F
把遊戲的邏輯寫在 coroutine 內
07/10 10:23, 2F

07/10 10:23, , 3F
IO thread 接到後就去 resume,這樣兩邊可以隔離開
07/10 10:23, 3F
我會去看一下有關這部分的內容,感謝您:) ※ 編輯: xtxml 來自: 220.133.45.115 (07/10 10:50)
文章代碼(AID): #1F-uas9r (GameDesign)