游戏服务器当中有哪些rpc使用场景RPC通信的场景

分布式并行RPC的研究与实现 - 中国优秀硕士学位论文全文数据库
中国优秀硕士学位论文全文数据库
分布式并行RPC的研究与实现
【作者基本信息】
计算机系统结构,
【摘要】 近年来,由于计算机网络技术的发展,客户/服务器(C/S)模型已趋于成熟和完善,但基于该模型之上的RPC(REMOTE PROCESS CALL,远程过程调用)通信鲜有进一步的研究,大多数文献书籍只是从程序员的角度阐明了C/S模型下RPC的使用方法,未对它的工作机制作出阐述。针对此,笔者首先对C/S模型下的RPC通信进行了研究,勾勒出该种模型下RPC通信的组成部分和各部分之间的协作关系,并用较直观的图表方式进行了描述,同时找出了这种模型下RPC通信依旧存在的缺点——即无法充分利用网络中的其它服务器资源。
为了构建能充分利用网络中其它服务器资源的分布式并行RPC通信系统,笔者首先分析了要构建这样一个高可用性、高可靠性并能负载平衡的系统所应解决的基本问题和解决这些问题的切入点,然后提出了相应的解决方案——构建客户/分布式并行服务器模型。在构建好客户/分布式并行服务器模型之后,笔者设计了基于该模型之上的RPC通信的系统构成和实现方法,并阐述了从设计、实现、实验到实验结论分析的全过程,在这一过程中的所有思路和设想也用了较直观的表达方式。
客户/分布式并行服务器模型下的RPC通信系统经实验表明能实现服务器系统的高可用性和可靠性,并且能平衡服务器系统中服务的分布情况。
【关键词】 ;
【网络出版投稿人】
【分类号】TP393.01
【被引频次】1
【下载频次】269
本文链接的文献网络图示:
本文的引文网络大唐无双2,登陆游戏,选服务器,确定后,弹出确认RPC信息_大唐无双2吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0可签7级以上的吧50个
本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:59,446贴子:
大唐无双2,登陆游戏,选服务器,确定后,弹出确认RPC信息
然后与服务器连接断开,请稍后再连接,怎么回事,求大神解决
经常看到一些吧友求模拟...
怎么办,半小时了
你是否玩伤了 满是土豪...
详情请见一区服务器。创...
本服务器名称:忏 魂 国...
服务器名称:梦龙城 qq...
「大唐无双手游」官方手游大唐无双手游极速下载.超犀利玩法,40vs40战斗不折扣,指尖PK团战真体验!
应该是LZ的网络出了故障
十五字十五字十五字十五字十五字
有人帮我一下没有啊
淡定 双休日 WE 经常出现 要是出现上述情况 关掉游戏 重启客户端 一般都能进 我也遇到过 重启一次进不去 就多重启几次
我也是这样的。 手快点进入了。
表示今下午一下午都在弄这玩意,就是进不去,都是一个文件安的,我卸了安安了卸,就是进不去,换了账号都进不去。其他人的都能进,我悲催啊!不知道重启电脑有用不,要是没用,那我掐死人啊!
我就是这个问题
用加速大唐无双服务器后登陆就好了鸟~~~~~~~
不太好用。有点坑。
女神联盟2,游族《女神联盟2》,欧美魔幻RPG网页游戏,众神大陆,万族混战.女神联盟2.游族2016精品页游,欧美魔幻RPG页游,女神超多游戏,招募史诗英雄,等你来战!
下了个确实就好了,不知道楼主上去了没有,反正昨晚上我上去了
今天更新啊 晕
哎,uu不好用,我早用过了!
我在这也求大神解释!!!!!!!uu用不成!!!!
我还出现过rpc认证错误呢
刚刚有个傻冒告诉我姓周,真逗啊!是个演员好吗?笑死我了!真想一板砖呼死他!我记得鲁迅原名,浙江,是著名的反法西斯音乐家,一生有2000多项发明,被称为太空步的创始人。他拥有一个好嗓子,小学时就凭借着90分钟跑100米的优异成绩考上了新东方烹饪学校!毕业后成功进入苦心练习勃鸡, 他擅长110米栏,左手反打技术高超,拿手全垒打,大灌篮,“后空翻180度右旋体360度后蹬地翻转720度”是他的经典动作,更难得可贵的是他落地没有水花。他还是恶魔果实能力者,传说中的三忍之一,曾大闹天宫,后改邪归正,统一三国,传说他有107个弟兄,个个铜头铁臂,面目狰狞,这便是羊村的起源,她生平淡泊名利,后遇到高人阿凡达的指点,打死了白雪公主,与七个小矮人快乐的生活在一起。!并写了的故事。名侦探柯南讲述的是要成为海贼王的收服了皮卡丘并登上启动光能使者打败了鲨鱼辣椒,然后跟多啦A梦一起通过黄金十二宫收集七个葫芦娃召唤神龙复活二代火影,但最终为了保卫M78星云而成为了羊村村长,同蓝精灵们一起抵抗光头强的入侵的故事 。
贴吧热议榜
使用签名档&&
保存至快速回贴github 地址&
FFRPC 已经陆陆续续开发了1年,6月6日这天终于完成了我比较满意的版本,暂称之为 V0.2,FFRPC实现了一个C++版本 的异步进程间通讯库。我本身是做游戏服务器程序的,在服务器程序领域,系统是分布式的,各个节点需要异步的进行通信, 我的初衷是开发一个易用、易测试的进程间socket通信组件。实际上FFRPC 已经是一个框架。
FFRPC 主要特性
FFRPC 采用Epoll Edge Trigger模式,这里特别提一下ET是因为在异步工作模式,ET方式才是epoll最简单也是最高效的方式 网上的很多帖子写LT简单易用,那纯碎是没有理解ET的精髓之所在,如果读者想要从ffrpc中探究一下ET的奥妙,提醒读者的是 请把Epoll 看成一个状态机!FFRPC 采用Broker模式,这样的好处是 Scalability!! 在游戏领域的开发者一定很熟悉Master/Gateway/Logic Server的概念, 实际上Master 实际上扮演的Broker master的角色,而gateway扮演的是Broker slave的角色,Broker Slave负责转发客户端的 请求到Logic Service,提供一个转发层虽然会增加延迟,但是系统变得可扩展,大大提高了吞吐量,这就是Scalability!! 而Broker master负责管理所有的Master Slave,负责负载均衡。不同的client分配不同的Broker SLave。
FFRPC 就是基于以上的思路,有如下四个关键的概念:
一:broker master 负责负载均衡,同步所有节点的信息,所有的slave broker和rpc service/ rpc cleint都要连接broker master。
二:slave broker负责完成service和client间转发消息,如果service、client和broker在同一进程,那么直接在内存间投递消息, 这是v0。2的重要的优化,v0。1时没有此功能,网友很多反应这个问题,看来大伙对优化还是太敏感! 另一个创新之处在于ffmsg_t,封装了消息的序列化和反序列化,我已经厌倦了protobuff,如果你也研究了为每个消息定义cmd 和为cmd写switch(有些人可能已经用上注册回调函数,但还有更好用的)。实际上定义消息结构体时一个消息本身就是独一无二的, 所以为什么我们还要给消息在定义一个cmd呢?比如定义了struct echo_t{}消息,echo_t名称本身就是独一无二的,否则编译 器肯定报错了,那么为什么不直接用echo_t这个名称作为cmd呢?在FFRPC中可以使用TYPE_NAME(echo_t)获得消息体名称字符串, 是滴TYPE_NAME是一个很有意思的实现,c++中并没哟关键字可以获取一个类的名称,但是所有的编译器都实际上已经提供了这个功能! 详情请看源码。有读者可能会纠结使用消息体结构的名称做cmd固然省事,但是浪费了流量!32位的cmd总是比字符串省流量,是的这个 结论虽然我很不喜欢(我总是懒的优化,除非...被逼的),但是他是对的!ffrpc中很好的解决了这个问题,当每个节点初始化时都要 注册到broker master,这时所有的消息都会在master中分配一个唯一的msg id,这样就可以用整数1代表echo_t结构了,由于每个节点 都知道echo_t到1的映射,所以程序员再也不用手动定义cmd了,broker唯一初始化时动态定义。
三:ffrpc service,提供接口的模块,也就就是服务端,通过ffrpc类注册的接口基于异步模式,推荐的模式是每个消息都返回 一个结果消息
四:ffrpc client是调用的ffrpc service的模块,基于异步模式,记住服务名成和消息名称唯一的确定一个接口,这个c++的类和类接口 概念是一致的,而且调用远程接口时可以指定回调函数,而且回调函数还支持lambda参数绑定!
想快速见证ffrpc库的魅力可以小看如下的示例,只要你有linux系统,可以1分钟内测试这个示例,ffrpc没有其他依赖,提醒你的是 FFRPC的日志组件是彩色的哦!
#include &stdio.h&
#include "base/daemon_tool.h"
#include "base/arg_helper.h"
#include "base/strtool.h"
#include "base/smart_ptr.h"
#include "rpc/ffrpc.h"
#include "rpc/ffbroker.h"
#include "base/log.h"
using namespace
//! 定义echo 接口的消息, in_t代表输入消息,out_t代表的结果消息
//! 提醒大家的是,这里没有为echo_t定义神马cmd,也没有制定其名称,ffmsg_t会自动能够获取echo_t的名称
struct echo_t
struct in_t: public ffmsg_t&in_t&
void encode()
encoder() &&
void decode()
decoder() &&
struct out_t: public ffmsg_t&out_t&
void encode()
encoder() &&
void decode()
decoder() &&
struct foo_t
//! echo接口,返回请求的发送的消息ffreq_t可以提供两个模板参数,第一个表示输入的消息(请求者发送的)
//! 第二个模板参数表示该接口要返回的结果消息类型
void echo(ffreq_t&echo_t::in_t, echo_t::out_t&& req_)
echo_t::out_t out;
out.data = req_.arg.
LOGDEBUG(("XX", "foo_t::echo: %s", req_.arg.data.c_str()));
req_.response(out);
//! 远程调用接口,可以指定回调函数(也可以留空),同样使用ffreq_t指定输入消息类型,并且可以使用lambda绑定参数
void echo_callback(ffreq_t&echo_t::out_t&& req_, int index)
LOGDEBUG(("XX", "%s %s %d", __FUNCTION__, req_.arg.data.c_str(), index));
int main(int argc, char* argv[])
//! 美丽的日志组件,shell输出是彩色滴!!
LOG.start("-log_path ./log -log_filename log -log_class XX,BROKER,FFRPC -log_print_screen true -log_print_file true -log_level 6");
//! 启动broker,负责网络相关的操作,如消息转发,节点注册,重连等
ffbroker.open("app -l tcp://127.0.0.1:10241");
//! broker客户端,可以注册到broker,并注册服务以及接口,也可以远程调用其他节点的接口
ffrpc_t ffrpc_service("echo");
ffrpc_service.reg(&foo_t::echo, &foo);
ffrpc_service.open("app -broker tcp://127.0.0.1:10241");
ffrpc_t ffrpc_
ffrpc_client.open("app -broker tcp://127.0.0.1:10241");
echo_t::in_t in;
in.data = "helloworld";
//! 你没有看见get_type_name定义,但是他确定存在
printf("测试获取类名:%s\n", in.get_type_name());//输出为:测试获取类名:echo_t::in_t
for (int i = 0; i & 100; ++i)
//! 如你所想,echo接口被调用,然后echo_callback被调用,每一秒重复该过程
ffrpc_client.call("echo", in, ffrpc_ops_t::gen_callback(&foo_t::echo_callback, &foo, i));
sleep(300);
ffbroker.close();
ffrpc中broker、client、service可以启动在不同的进程,如果在同一进程,那么直接内存间投递消息
ffrpc 每个实例单独启动一个线程和任务队列,保证service和client的操作都是有序、线程安全的。
如果你研究过protobuff、thrift、zeromq、ice等等类库/框架, 更要试用一下ffrpc。
github 地址&
阅读(...) 评论()不知不觉进入游戏行业工作已近一年,在这一年的时间里,除了繁忙的完成策划的逻辑需求,我也一直在思考一个问题:一个支持横向扩展的mmo游戏服务器,其底层实现到底是怎样的呢?当然,既然都已经在公司待了近一年时间,对其架构和实现肯定都是有一定了解了,但是没有具体实现过,永远都只是纸上谈兵,对其思考总不可能深入。更何况造轮子是程序员的乐趣之一,还可以锻炼自己的技术能力,自由接触自己想接触的技术细节,何乐而不为呢?因此,深思良久,今天在此决定开一个《自己动手从零写mmo游戏服务器》的系列,用来记录自己从0开发的历程。
服务端使用C++做底层引擎开发语言,暴露接口给Python写逻辑层脚本,客户端使用Unity, C#搭建一个小场景,包括主角和一个大的平面,简单的用于验证服务端的功能即可。
服务端采用多进程架构,即流行的 多Gate + 多Game + n个单点管理进程(Manager),Gate类似于其他IT领域里的消息队列MQ,负责与玩家客户端的连接,将客户端的消息请求分发到玩家实体对应的Game进程;而Game负责游戏相关的逻辑计算,并将计算结果通过Gate发送到客户端。可以看到,Gate实际上充当了客户端与Game进程连接的一个代理Proxy,那为什么客户端不直接连接到Game呢?这个后续再继续分析。除了核心的Gate + Game外,还需要有数个单点管理进程,主要用于跨Game间的通信和全服的管理。
显然,从零开始写游戏服务器,需要设计很多技术点,从最基础的网络通讯到高层的mmo游戏基础逻辑(属性同步,RPC,AOI,位置同步策略...),我们需要一一实现,在此我从底层到高层,将所需的技术点列一个表,今后的开发进度也围绕这个表进行,逐步完成我们的游戏服务器。(该表可能会随着自己理解的加深不断补充变化)
基础网络通信功能
该部分不准备从0写起,准备基于boost.asio进行开发,主要是因为不想纠结于不同平台的通信api和模型,这种脏活累活既然已经有人帮我们做了,那我们就直接利用起来吧。另外为了快速搭建原型,暂时不去管复杂的网络状况,我们假设网络是像局域网这样的优良网络,因此我们直接选用TCP协议进行开发。
RPC是服务器间通信的基本方式,实现RPC涉及到存根stub的自动生成方案,以及通信协议的确定,可以考虑json格式或者protobuf
Gate + Game的基础架构
在以上基础上,搭建出Gate + Game的基础架构,实现客户端与服务端的通信
基础游戏逻辑
包括属性同步、AOI、位置同步等等,走到这一步,一个mmo游戏服务器的demo就出来了
包括数据库、寻路、场景划分等等,这些都是后话了
目前计划每周更新一篇,记录开发进展和技术难点,开发进度视工作繁重程度而定。。。
阅读(...) 评论()}

我要回帖

更多关于 rpc的使用场景 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信