游戏服务器多线程错误

本文关键字:错误 多线程 服务器 游戏 | 更新日期: 2023-09-27 18:08:11

我正在为我正在创建的游戏创建一个c#服务器,我是多线程和套接字编程的新手。我的服务器应该能够在单独的线程中容纳多个客户端。我的服务器是作为控制台应用程序运行的。我唯一的问题是,当我的一个测试客户端退出应用程序时,我不知道如何停止它们正在运行的线程。如何在线程运行时停止线程?

游戏服务器多线程错误

我将假设您的线程本质上是消息处理线程,它们等待来自客户机的请求,然后提供响应。如果是这种情况,线程的主循环可能类似于下面的HandleClientRequests方法。注意,本例假定断开连接是正常的。一个健壮的实现还会考虑到客户端在没有执行正确的关闭顺序的情况下断开连接或连接在某个点失败的可能性。

public class ClientConnection {
    private Socket _socket;        
    public ClientConnection(Socket socket) {
        _socket = socket;
        new Thread(HandleClientRequests);
    }
    /* snip */
    public void HandleClientRequests() {
        bool disconnectRequested = false;
        while(!disconnectRequested) {
            var message = ReadNextMessageFromSocket();
            if(message.Type == MessageType.CloseConnection) {
                disconnectRequested = true;
            } else {
                //service request and send response
            }
        }
        ShutdownConnection();
        //after this point the thread terminates
    }
}

无论如何,你的ThreadStart方法通常应该有某种循环,在其中你可以做任何你想让你的线程做的事情,并且这个循环应该有一个条件,用来表示线程是时候结束了。

当函数返回时,线程结束。你的线程应该意识到客户端离开了,并脱离了你的线程循环。