使用网络库的状态信息的TCP服务器

时间:2011-02-12 00:45:39

标签: c++ poco boost-asio ace

我正在为在线回合制游戏编写tcp服务器。我已经使用php套接字编写了一个原型,但是想转向C ++。我一直在看流行的网络库(ASIO,ACE,POCO,LibEvent),但目前还不清楚哪一个最适合我的需求:

1)连接是持久的(大约几分钟),服务器必须能够处理100多个同时连接。

2)连接必须能够维护状态信息(用户登录信息)。 [我的php原型目前要求每个客户端请求包含登录信息]

3)可选地并且优选地是多线程的,但是单个过程。不希望每个连接都有1个线程,但是在所有打开的连接上都有固定数量的线程。


我倾向于POCO的TCPServer或Reactor框架,但不确定它们是否符合我的要求。我认为Reactor是单线程的,TCPServer强制执行1:1线程/连接。我是对的吗?


在任何一种情况下,我都不确定如何执行最重要的任务,即将登录信息与具有随机连接的特定连接相关联。

2 个答案:

答案 0 :(得分:5)

Boost.Asio应该符合您的要求。反应堆队列可以由multiple threads提供服务。使用异步方法将使您能够为所有连接设计fixed number个线程。

tutorialsexamples可能是您不熟悉图书馆的最佳起点。

答案 1 :(得分:0)

您可能还会看一下MUSCLE,这是一个多用户网络库和我在编写此类应用程序时编写的服务器。它是BSD许可的,处理数百个用户,并包括服务器端数据库机制,用于存储和共享您希望客户彼此了解的任何信息。默认情况下,服务器是单线程的,但我没有发现这在实践中是一个问题(如果有必要,可以将服务器扩展为多线程)。