游戏服务器2

接着前面的游戏服务器1写,实现了用spserver+rapidxml在windows平台上的穷人版服务器,可以对指定游戏进行分数排行,以及留言版的功能。等过段时间把域名神马的弄好了就可以给我在线留言了。穷人版专属博客?呵呵

需要记录的几点:

1。spserver中对于SP_HandlerFactory和SP_Handler和SP_LineMsgDecoder的使用。网络事件的处理是在SP_Handler的子类中重载函数完成的,SP_HandlerFactory的子类的实例对应一个TCP连接,维护一个SP_Handler子类的实例。SP_LineMsgDecoder的实例在SP_Handler中可以获得实际的网络数据,比如这样:

SP_LineMsgDecoder *decoder=(SP_LineMsgDecoder*)request->getMsgDecoder();

const char* tmp = decoder->getMsg();

那么getMsg();中将返回char*的数据。一般来说网络数据报的格式由我们自己定义,那么用xml来操作就很方便,下面是使用rapidxml解析getMsg();返回值字符串的一部分代码:

if (XMLRoot->first_attribute("name")) strcpy(node.name, XMLRoot->first_attribute("name")->value());
if (XMLRoot->first_attribute("score")) strcpy(node.score, XMLRoot->first_attribute("score")->value());

2.如果需要在spserver中与文件操作协同工作,请对文件加锁,因为并发过程中可能会有访问冲突:

sp_thread_mutex_t mMutex;//定义

sp_thread_mutex_init(&mMutex,NULL);//初始化

sp_thread_mutex_lock(&mMutex);//加锁

sp_thread_mutex_unlock(&mMutex);//解锁

sp_thread_mutex_destroy(&mMutex);//析构

如果觉得仍不安全(我没验证,谨慎而已),可以在此基础上再用个单件模式。



你可能感兴趣的:(thread,游戏,windows,网络,服务器,null)