在线国际象棋游戏:如何设计服务器
chess game online: how to design the server
我正在开发一款在线国际象棋游戏。
我的想法是让服务器成为一个玩家与另一个玩家进行数据通信的地方。
所以这是我继续的计划:
当两个玩家连接服务器(使用 TCP)时,服务器为他们创建两个线程。意思是两个线程需要互相通信
// server
while(true)
{
if(socket.accept())
{
create_a_thread(); // handle one player
}
}
但是一个游戏需要服务器有两个线程?我不认为这是一个好的设计。
我应该如何重新设计我的服务器?
概念层的两个思考:
- 您确定要让所有用户都通过您的服务器吗?为什么不在两个玩家之间进行一些点对点?!
- 通过中央服务器时,您不需要两个玩家之间的 1-1 "relation"。您的服务器可以引入一个 API,例如
makeMove(Game g, Move m)
,其中一个玩家只需将移动推送到服务器,然后服务器向 一个 客户端发送通知。
我的意思是:让事情尽可能简单很重要。当您建立国际象棋游戏的心智模型时;是的,那么第一个想法是,即使您的服务器也需要 "game" 用户的 "two connected" 概念。但这不一定是真的。而是将服务器视为 "mail box" 并在其中放置一个字母 "here is my next move";服务器确保它到达其他玩家!
长话短说:您应该首先确定服务器中的 核心 职责(例如:"receiving user requests"、"processing user requests"、"send notifications") ;然后你查看 "multi-threading" 那些。
我正在开发一款在线国际象棋游戏。
我的想法是让服务器成为一个玩家与另一个玩家进行数据通信的地方。
所以这是我继续的计划:
当两个玩家连接服务器(使用 TCP)时,服务器为他们创建两个线程。意思是两个线程需要互相通信
// server
while(true)
{
if(socket.accept())
{
create_a_thread(); // handle one player
}
}
但是一个游戏需要服务器有两个线程?我不认为这是一个好的设计。
我应该如何重新设计我的服务器?
概念层的两个思考:
- 您确定要让所有用户都通过您的服务器吗?为什么不在两个玩家之间进行一些点对点?!
- 通过中央服务器时,您不需要两个玩家之间的 1-1 "relation"。您的服务器可以引入一个 API,例如
makeMove(Game g, Move m)
,其中一个玩家只需将移动推送到服务器,然后服务器向 一个 客户端发送通知。
我的意思是:让事情尽可能简单很重要。当您建立国际象棋游戏的心智模型时;是的,那么第一个想法是,即使您的服务器也需要 "game" 用户的 "two connected" 概念。但这不一定是真的。而是将服务器视为 "mail box" 并在其中放置一个字母 "here is my next move";服务器确保它到达其他玩家!
长话短说:您应该首先确定服务器中的 核心 职责(例如:"receiving user requests"、"processing user requests"、"send notifications") ;然后你查看 "multi-threading" 那些。