FFrpc python客户端lib使用解析


Posted in Python onAugust 24, 2019

摘要:

Ffrpc可以很方便的构建c++ server, 在网游服务器程序开发中,进程间通讯非常的重要,比如gateserver和gameserver或dbserver之间的通信。而ffrpc可以使得进程间通信非常简单,是由于ffrpc的broker模式封装了位置无关性,使得如gate调用gameserver的接口只需要知道对方的服务名,从而使得程序中各个节点的关系与系统的拓扑关系是完美吻合的。这也使得系统的架构更加清晰,系统的实现更健壮和易维护。

之前ffrpc只提供了c++ server/client的实现,在网游服务器程序开发中经常有些需求是需要其他语言和C++server通信的,比如一些工具程序,一些web配置、管理后台登通常用脚本语言实现更加敏捷。比如开发一个gm后台,就可以使用python开发一个web页面实现,而gm后台指令需要发给c++ server去执行。所以,脚本语言对于C++ server的的接口调用的需求是确实存在的。所以ffrpc中提供python的客户端礼库ffrpc-py。

特性

  • C++ server 通常是使用二进制协议传输数据的,但是如果手动用python组二进制包则非常的困难,好在有google protobuf和thrift两大神器,而google protobuf在服务器程序开发领域已经被广泛接受。所以由于C++ server定义接口时使用了protobuf(或者像我一样偏爱thrift),那么与脚本通讯就变得小轻松了。
  • 对于C++ server 来讲,通信时异步的,这是由于C++ server一般是逻辑层单线程,为了保持高并发能力,io操作异步化是必然选择。但是对于脚本如python这种,一般而言还是使用同步调用模型,而刚好ffrpc的通信模式要求所有的接口都是req<->ret一一对应的,ffrpc-py调用c++ server的接口,只需要制定输入消息,然后调用接口,接收返回消息,像调用本地函数一样直接,这也是rpc lib的存在意义。
  • Ffrpc-py 支持protobuf和thrift,当然必须和c++ server采用的通信协议一致。

示例

本例采用c++ sever thrift作为示例。由于ffrpc example目录的tutorial已经实现了一个c++ echo server,本例就利用ffrpc-py调用echo接口。

其中thrift的定义文件为:

struct echo_thrift_in_t {   
 1: string data
}

struct echo_thrift_out_t {   
 1: string data
}

使用ffrpc-py调用echo接口:

HOST = '127.0.0.1'
  PORT = 10246
  ffc = ffclient_t(HOST, PORT, 1.5) # 1.5 sec为调用超时时间
  req = ttypes.echo_thrift_in_t('ohNice')
  ret = ttypes.echo_thrift_out_t()
  ffc.call('echo', req, ret, 'ff')
  print('error_info = %s' %(ffc.error_msg()), ret)

ffrpc接口的参数的解释:

  • ffclient_t(HOST, PORT, 1.5) 构造函数的参数为broker的监听地址和端口。Ffrpc-py只需要知道broker的位置,至于调用的是哪个服务器的接口,这个由broker确定,至于目标服务器是跟broker在同一个进程,还是通过网络连接,ffrpc-py无需知道细节。
  • call 接口调用远程的服务器接口,参数一为c++server接口注册的服务名,ffrpc-py只需要知道服务名就可以定位目标服务器的位置
  • call第二个参数为请求参数
  • call第三个参数为c++ server返回的消息类型,如果call返回true,那么该消息会被自动赋上值
  • 第四个参数为消息的命名空间,比如定义thrift的文件的时候定义了命名空间,那么需要第四个参数填入命名空间,这里跟C++ server的注册的消息一致即可,如果C++ server也没有消息的命名空间,那么省略这个参数即可
  • Call接口成功返回True,失败为false,同时error_msg接口可以输出错误原因

总结

Ffrpc提供了python lib,可以实现py与c++ server的通信,这样利用python编写工具、后台都更加方便了。

同时ffrpc将会对于php进行支持,相应的client lib 不久就会开放出来。

Github:  https://github.com/fanchy/FFRPC

c++ server 的实现介绍参见:https://3water.com/article/168369.htm

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python通过imaplib模块读取gmail里邮件的方法
May 08 Python
python清除字符串里非字母字符的方法
Jul 02 Python
python中pygame针对游戏窗口的显示方法实例分析(附源码)
Nov 11 Python
Python实现1-9数组形成的结果为100的所有运算式的示例
Nov 03 Python
python-docx修改已存在的Word文档的表格的字体格式方法
May 08 Python
Python学习笔记之迭代器和生成器用法实例详解
Aug 08 Python
python 字典套字典或列表的示例
Dec 16 Python
Python实现不规则图形填充的思路
Feb 02 Python
Python安装whl文件过程图解
Feb 18 Python
python GUI库图形界面开发之PyQt5图片显示控件QPixmap详细使用方法与实例
Feb 27 Python
Keras模型转成tensorflow的.pb操作
Jul 06 Python
python中的sys模块和os模块
Mar 20 Python
用Python将Excel数据导入到SQL Server的例子
Aug 24 #Python
python 根据网易云歌曲的ID 直接下载歌曲的实例
Aug 24 #Python
用Python爬取QQ音乐评论并制成词云图的实例
Aug 24 #Python
python解释器spython使用及原理解析
Aug 24 #Python
python爬虫之爬取百度音乐的实现方法
Aug 24 #Python
python3 实现爬取TOP500的音乐信息并存储到mongoDB数据库中
Aug 24 #Python
python处理自动化任务之同时批量修改word里面的内容的方法
Aug 23 #Python
You might like
服务器web工具 php环境下
2010/12/29 PHP
PHP序列号生成函数和字符串替换函数代码
2012/06/07 PHP
简单谈谈php中的unicode和utf8编码
2015/06/10 PHP
浅析php中array_map和array_walk的使用对比
2016/11/20 PHP
快速解决PHP调用Word组件DCOM权限的问题
2017/12/27 PHP
JS中彻底删除JSON对象组成的数组中的元素
2020/09/22 PHP
JQuery 初体验(建议学习jquery)
2009/04/25 Javascript
javascript instanceof 内部机制探析
2010/10/15 Javascript
JavaScript调用堆栈及setTimeout使用方法深入剖析
2013/02/16 Javascript
一个简单的JS鼠标悬停特效具体方法
2013/06/17 Javascript
js动态修改整个页面样式达到换肤效果
2014/05/23 Javascript
JS实现至少包含字母、大小写数字、字符的密码等级的两种方法
2015/02/03 Javascript
详解JavaScript中的构造器Constructor模式
2016/01/14 Javascript
js实现九宫格的随机颜色跳转
2017/02/19 Javascript
JS常见创建类的方法小结【工厂方式,构造器方式,原型方式,联合方式等】
2017/04/01 Javascript
微信小程序图片选择、上传到服务器、预览(PHP)实现实例
2017/05/11 Javascript
JS中mouseup事件丢失的原因与解决办法
2017/06/14 Javascript
微信小程序实现图片上传、删除和预览功能的方法
2017/12/18 Javascript
vue单页开发父子组件传值思路详解
2018/05/18 Javascript
Angular脚手架开发的实现步骤
2019/04/09 Javascript
Nuxt项目支持eslint+pritter+typescript的实现
2019/05/20 Javascript
vue-simple-uploader上传成功之后的response获取代码
2020/09/07 Javascript
[53:18]Spirit vs Liquid Supermajor小组赛A组 BO3 第三场 6.2
2018/06/03 DOTA
Python常见文件操作的函数示例代码
2011/11/15 Python
python利用标准库如何获取本地IP示例详解
2017/11/01 Python
Python线程池模块ThreadPoolExecutor用法分析
2018/12/28 Python
解决python执行较大excel文件openpyxl慢问题
2020/05/15 Python
CSS的pointer-events属性详细介绍(作用和注意事项)
2014/04/23 HTML / CSS
KIKO比利时官网:意大利彩妆品牌
2017/07/23 全球购物
Square Off美国/加拿大:世界上最聪明的国际象棋棋盘
2018/12/06 全球购物
电气专业推荐信范文
2013/11/18 职场文书
大班幼儿评语大全
2014/04/30 职场文书
人代会标语
2014/06/30 职场文书
本科毕业生应聘求职信
2014/07/06 职场文书
2015年校长新年寄语
2014/12/08 职场文书
Jedis操作Redis实现模拟验证码发送功能
2021/09/25 Redis