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