我们正在与一个小团队开发一个 mmorpg。我们可以在服务器端创建 2 个结构来管理客户端和处理包。我想知道什么结构更好。如果您可以推荐一个好的结构,我将非常高兴。
第一个结构
IdleSessionQueue 和 ActiveSessionMap
在这种结构中,最初创建空闲会话(IdleSessionQueue),并有一个线程(NetworkListenerThread)监听网络并接受用户。该线程在新用户到达时从空闲会话中获取会话,并使用 SessionId 和 Session 的值将该会话添加到活动会话表(ActiveSessionMap)中。然后创建一个线程(ClientListenerThread)来监听添加到表中的会话。为每个用户发生一个 ClientListenerThread。当客户端断开连接时,它会再次添加回 IdleSessions。
当客户端发送请求(数据包)时,该请求将添加到 TaskQueue。预先创建了一定数量的workerThread。只要TaskQueue中有一个包,WorkerThreads就会接收到这个包并对其进行处理,并将新的包添加到SendQueue中。SenderThreads 接收 SendQueue 中的每个数据包并将其发送给客户端。
第二结构
IdleSessionQueue 和 ActiveSessionMap
在这种结构中,最初创建空闲会话(IdleSessionQueue),并有一个线程(NetworkListenerThread)监听网络并接受用户。当新用户到达时,该线程从空闲会话中获取会话,并使用 SessionId 和 Session 的值将此会话添加到活动会话表 (ActiveSessionMap)。然后创建一个线程(ClientListenerThread)来监听添加到表中的会话。为每个用户发生一个 ClientListenerThread。当客户端断开连接时,它会再次添加到 IdleSessions。当客户端发送请求(数据包)时,该请求由 ClientListenerThread 处理,并将结果发送到一个或多个客户端。
哪个是更好的解决方案,或者这个问题的最佳解决方案是什么?