我正在在线开发一个国际象棋游戏。
我的想法是将服务器作为数据从一个玩家到另一个玩家进行通信的地方。
所以这是我继续的计划:
当两个玩家连接服务器(使用 TCP)时,服务器为它们创建两个线程。这意味着两个线程需要相互通信。
// server
while(true)
{
if(socket.accept())
{
create_a_thread(); // handle one player
}
}
但是一个游戏需要服务器中的两个线程吗?我不认为这是一个好的设计。
我应该如何重新设计我的服务器?
关于概念层的两个想法:
- 您确定要让所有用户都通过您的服务器吗?为什么不在两个玩家之间进行一些点对点?!
- 通过中央服务器时,您不需要两个玩家之间的 1-1"关系"。您的服务器可以引入类似
makeMove(Game g, Move m)
的 API,其中一名玩家只需将移动推送到服务器,然后服务器向该客户端发送通知。
我的意思是:让事情尽可能简单是很重要的。当你建立一个国际象棋游戏的心智模型时;是的,那么第一个想法是,即使是你的服务器也需要"两个连接"用户的"游戏"的概念。但这不一定是真的。而是将服务器视为一个"邮箱",您可以在其中放置一封信"这是我的下一步行动";服务器确保它到达另一个玩家!
长话短说:您应该首先确定服务器中的核心职责(例如:"接收用户请求","处理用户请求","发送通知");然后研究"多线程"这些职责。