采用用同步编程的方式实现跨进程异步获取数据[一]
转载请注明:http://blog.csdn.net/herm_lib/article/details/11686483
异步获取数据,我这边采用了一点点小技巧,这样异步获取数据的操作,变成和同步操作一样自然。
这个我个人得静下心来,好好地梳理一下,过个半个月遇到类似的需求,我自己都忘记是怎么处理了。处理方式比较有意思。
遇到一些常见的异步操作的业务逻辑:
[1] 角色登录请求,发现内存中没有该角色数据,从远程的缓存或者DB读取该角色数据。
[2] 获取某个角色信息,发现这个角色信息目前不在线,这时候,也从远程的缓存或者db读取该角色数据。
[3] 判断这个家伙是否是另外一个玩家的好友,sns类游戏中,这类逻辑超多。
我们先把直接做法,简单列出来,用来和另外一种比较优雅的方式做比较。
术语定义:
Juge_Friend_Req
判断是否是好友的请求,发向好友服务器。
Juge_Friend_Res
从好友服务器回来。
Add_Energy_Req
从Client发过来的加能量的请求。
以[3]为例子,当然,好友服务器和主逻辑服务器是位于两个进程中,如果一个进程中,那没什么好说的。比如,给好友加能量,借好友宠物上场战斗。
void JudgeFriendRes(ssMsg, param){ param = ssMsg.isFriend;}
设置这个参数后,DispatchCS用透传的数据,让流程继续回到AddEnergyReq。当第2次走到AddEnergyReq时,param != nullptr,直接判定是否是好友,接下来做该做的事情。