国际象棋游戏:如何设计服务器

时间:2017-03-26 23:18:58

标签: multithreading sockets serversocket

我在线开发国际象棋游戏。

我的想法是让服务器成为数据从一个玩家传递到另一个玩家的地方。

所以我的计划是继续:
当两个玩家连接服务器(使用TCP)时,服务器为它们创建两个线程。这意味着两个线程需要相互通信。

// server
while(true)
{
    if(socket.accept())
    {
        create_a_thread(); // handle one player
    }
}

但是一个游戏需要服务器中的两个线程吗?我不认为这是一个很好的设计。

我该如何重新设计我的服务器?

1 个答案:

答案 0 :(得分:1)

关于概念层的两点想法:

  • 您确定要让所有用户通过您的服务器吗?为什么不在两个玩家之间做一些点对点?!
  • 通过中央服务器时,两个玩家之间不需要1-1“关系”。您的服务器可能会引入makeMove(Game g, Move m)之类的API,其中一个玩家只需将移动推送到服务器,然后服务器就会向一个客户端发送通知。

我的意思是:让事情变得尽可能简单是很重要的。当你建立一个国际象棋比赛的心理模型;是的,那么第一个想法是,即使你的服务器也需要“两个连接”用户的“游戏”的概念。但这不一定是真的。而是将服务器视为“邮箱”,在其中放置一封信“这是我的下一步行动”;并且服务器确保它到达其他玩家!

长话短说:首先应确定服务器中的核心职责(例如:“接收用户请求”,“处理用户请求”,“发送通知”);然后你会研究那些“多线程”。

相关问题