我正在开发一个mmorpg游戏服务器,它同时为数百名,有时甚至数千名玩家提供服务。发送到此服务器的某些播放器操作需要数据库访问( sql ),例如:当用户选择其字符之一时,与此字符关联的所有数据(项、级别、位置)都将从sql服务器检索,即使此应用程序与sql服务器没有任何(直接)连接。该软件通过向外部数据服务器发送一个特定的数据包来做到这一点,外部数据服务器的作用就像一个“代理”到sql服务器。(所有这些都是为了避免用缓慢的数据库查询阻塞网络线程池)
为了说明它是如何工作的:
注意:每个客户端都有一个ID,假设客户端已经通过身份验证,并在字符选择屏幕上。
按顺序排列:
客户端-> (字符名) -> GameServer -> (播放器id +字符名) -> DataServer -> (播放器id +字符信息) -> GameServer -> (字符信息) -> Client
今天,整个体系结构就是这样运作的。但对我来说,这太复杂了,无法维护,因为我必须维护两个独立的软件,并处理这些服务器之间的网络连接,以及创建新请求、新响应、解析这些内容等所有相关内容。我与一位同事讨论了这一点,他说外部服务器的性能会更好,但我正在考虑使用C++特性(lambdas)来实现这一点,所以我考虑创建一个线程池,每个线程都有自己的数据库连接。这个线程池将等待数据库工作的到来(就像std::function<>调用的那样),这样我就可以更容易地在同一个进程中处理请求,而不必担心阻塞网络队列(iocp)。
那么,在同一进程上使用线程池而不是使用外部进程的利弊是什么?我应该期望它表现得更好,更糟,还是完全一样?
发布于 2015-02-25 01:19:38
“那么,在同一进程上使用线程池而不是使用外部进程的利弊是什么?”
最重要的对点是
“我应该期望它表现得更好,更糟,还是完全一样?”
从上面提到的要点(特别是第二点)来看,在与子进程沟通时,人们应该期望的表现要差得多。
对不起,我实际上看不到任何优点,因为您在描述用例时使用了外部过程。
https://stackoverflow.com/questions/28709400
复制相似问题