[請益] 請問有關game server多線程處理的問題
最近在做一個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
07/10 10:22, 1F
→
07/10 10:23, , 2F
07/10 10:23, 2F
→
07/10 10:23, , 3F
07/10 10:23, 3F
我會去看一下有關這部分的內容,感謝您:)
※ 編輯: xtxml 來自: 220.133.45.115 (07/10 10:50)