boost库在工作(35)网络服务端之五

在前面的例子里,只是处理每个连接发来的消息,然后再把消息转回自己的那里,跟别的连接没有什么关联,这种情况只会适应一种像HTTP的那样,只关心自己的东西。但在网络服务器里,最多的是跟别人有关联的服务。比如说聊天室,就是不断地把所有进入这个聊天室的人的消息向所有人广播出去,也就是每个进来的连接,把连接所有收到的内容,再向所有连接发送出去。又如在网络游戏的服务器里,当每个地图里走动的人,都要向所有可视范围里的人发送位置消息,这样在别的游戏玩家那里就看到附近的人在走动。又比如在工业领域里,需要管理很多设备,每台设备都连接到服务器,不断更新自己的数据,而这些数据又要不断向所有监控的管理客户端发送出去,以便让监控客户端显示这些信息出来,告之操作人员这些设备正在处理运行什么状态,或者有什么故障。在这种需求情况之下,需要一个集合来保存所有的连接,以便其中一个连接的消息可以向其它连接进行发送出去。在这里以以前的例子为基础,再来添加一个管理所有连接的类,这样就可以很方便地向任何连接发送消息了。具体的代码如下:

//管理所有连接类。
//软件开发人员:蔡军生  2013-07-28
class CAllConnect
{
public:
//添加一个连接到连接集合。
void Add(boost::shared_ptr<CConnect > pConnect)
{
     m_setConnect.insert(pConnect);
}
//从连接集合删除一个已经失去连接。
void Delete(boost::shared_ptr<CConnect > pConnect)
{
     m_setConnect.erase(pConnect);
}
 
std::set< boost::shared_ptr<CConnect > >& GetAllConnect(void)
{
     return m_setConnect;
}
private:
std::set< boost::shared_ptr<CConnect > > m_setConnect;
};


类CAllConnect实现保存所有连接,并且使用Add函数来添加连接到集合里,使用Delete函数来从集合里删除连接,使用GetAllConnect来获取连接集合。

你可能感兴趣的:(boost库在工作(35)网络服务端之五)