簡體   English   中英

在C ++ / WinSock中制作(線程化)游戲服務器

[英]Making (threaded) game server in C++/WinSock

我正在使用C ++和OpenGL進行游戲。 我已經制作了一個線程服務器,它現在接受客戶端(游戲)並從它們接收消息。 現在游戲只發送消息。 我希望游戲和服務器能夠發送和接收,但我不確定最好的方法。 我正在考慮使用一個線程進行發送,一個用於接收,兩者都在同一個套接字上。 現在游戲在一個線程中運行,服務器為每個客戶端創建一個單獨的線程。

尋找有關如何為游戲和服務器進行操作的建議(除非您的建議對於兩者都相同)。 有任何問題請隨時詢問我(們 :)

謝謝!

您需要做的是為每個客戶端設置一個傳出的消息隊列。 假設您有2個客戶端連接到服務器,一個由線程A提供服務,另一個由線程B提供服務。線程A應在其套接字上執行WaitOnMultipleObjects()並在其隊列的信號量/互斥/條件變量上執行。 這樣,如果它在隊列中得到某些東西,它就可以喚醒並發送出去。 如果它從客戶端收到一條消息,它不需要提供給客戶端B,它將處理該消息並將其放入線程B的傳出隊列中。

這是一種非常簡單的同步方案。 如果你的游戲非常復雜或龐大,你將不得不做一些比這更聰明的事情。

不要在游戲服務器中使用線程。 事實上,許多專業的AAA游戲服務器都是單線程的 - 每一個我都見過的。

考慮使用Boost.ASIO,它可以通過C ++ API實現這一點(除了異步I / O之外,還允許許多不同的方法)。 有很多教程 但是,對於絕對最高性能,您可能不應該使用線程。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM