multithreading - 国际象棋游戏: how to design the server

标签 multithreading sockets serversocket

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

我的想法是使服务器成为数据从一个播放器与另一个播放器进行通讯的地方。

所以这是我继续的计划:
当两个播放器通过TCP连接服务器时,服务器将为两个服务器创建两个线程。这意味着两个线程需要相互通信。

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

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

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

最佳答案

关于概念层的两个想法:

  • 您确定要让所有用户都通过服务器吗?为什么不在两个玩家之间进行点对点?!
  • 通过中央服务器时,两个玩家之间不需要1-1的“关系”。您的服务器可以引入makeMove(Game g, Move m)之类的API,其中一个玩家将操作推到服务器上,然后服务器将通知发送给该一个客户端。

  • 我的意思是:让事情尽可能简单是很重要的。当您建立国际象棋游戏的心理模型时;是的,第一个想法是,即使您的服务器也需要“两个已连接”用户的“游戏”概念。但这不一定是正确的。而是将服务器视为一个“邮箱”,在其中您写了一封信“这是我的下一步”。然后服务器确保它可以到达其他播放器!

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

    关于multithreading - 国际象棋游戏: how to design the server,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43035733/

    相关文章:

    c++ - 在命名线程后附加调试器时, native C++ 线程名称不会显示在 visual studio 线程窗口中

    c++ - 程序关闭时 notify_all() 崩溃

    c++ - 将套接字传递给线程 C

    c++ - 如何测量队列中每秒弹出/推送的速率?

    c++ - 如何获得 future 值(value)?

    java - ServerSocket 接受行为

    java - TCP 客户端套接字填满堆

    java - 服务器套接字文件传输

    c++ - 非阻塞套接字和 send()

    sockets - socket.io 是否将消息排队到断开连接的客户端?