我正在在线开发国际象棋游戏。
我的想法是使服务器成为数据从一个播放器与另一个播放器进行通讯的地方。
所以这是我继续的计划:
当两个播放器通过TCP连接服务器时,服务器将为两个服务器创建两个线程。这意味着两个线程需要相互通信。
// server
while(true)
{
if(socket.accept())
{
create_a_thread(); // handle one player
}
}
但是一个游戏需要服务器中有两个线程吗?我认为这不是一个好的设计。
我应该如何重新设计服务器?
最佳答案
关于概念层的两个想法:
makeMove(Game g, Move m)
之类的API,其中一个玩家将操作推到服务器上,然后服务器将通知发送给该一个客户端。 我的意思是:让事情尽可能简单是很重要的。当您建立国际象棋游戏的心理模型时;是的,第一个想法是,即使您的服务器也需要“两个已连接”用户的“游戏”概念。但这不一定是正确的。而是将服务器视为一个“邮箱”,在其中您写了一封信“这是我的下一步”。然后服务器确保它可以到达其他播放器!
长话短说:您应该首先确定服务器中核心的职责(例如:“接收用户请求”,“处理用户请求”,“发送通知”);然后研究“多线程”那些。
关于multithreading - 国际象棋游戏: how to design the server,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43035733/