FFrpc python客戶端lib使用解析
摘要:
Ffrpc可以很方便的構(gòu)建c++ server, 在網(wǎng)游服務(wù)器程序開發(fā)中,進(jìn)程間通訊非常的重要,比如gateserver和gameserver或dbserver之間的通信。而ffrpc可以使得進(jìn)程間通信非常簡單,是由于ffrpc的broker模式封裝了位置無關(guān)性,使得如gate調(diào)用gameserver的接口只需要知道對方的服務(wù)名,從而使得程序中各個節(jié)點的關(guān)系與系統(tǒng)的拓?fù)潢P(guān)系是完美吻合的。這也使得系統(tǒng)的架構(gòu)更加清晰,系統(tǒng)的實現(xiàn)更健壯和易維護。
之前ffrpc只提供了c++ server/client的實現(xiàn),在網(wǎng)游服務(wù)器程序開發(fā)中經(jīng)常有些需求是需要其他語言和C++server通信的,比如一些工具程序,一些web配置、管理后臺登通常用腳本語言實現(xiàn)更加敏捷。比如開發(fā)一個gm后臺,就可以使用python開發(fā)一個web頁面實現(xiàn),而gm后臺指令需要發(fā)給c++ server去執(zhí)行。所以,腳本語言對于C++ server的的接口調(diào)用的需求是確實存在的。所以ffrpc中提供python的客戶端禮庫ffrpc-py。
特性
- C++ server 通常是使用二進(jìn)制協(xié)議傳輸數(shù)據(jù)的,但是如果手動用python組二進(jìn)制包則非常的困難,好在有g(shù)oogle protobuf和thrift兩大神器,而google protobuf在服務(wù)器程序開發(fā)領(lǐng)域已經(jīng)被廣泛接受。所以由于C++ server定義接口時使用了protobuf(或者像我一樣偏愛thrift),那么與腳本通訊就變得小輕松了。
- 對于C++ server 來講,通信時異步的,這是由于C++ server一般是邏輯層單線程,為了保持高并發(fā)能力,io操作異步化是必然選擇。但是對于腳本如python這種,一般而言還是使用同步調(diào)用模型,而剛好ffrpc的通信模式要求所有的接口都是req<->ret一一對應(yīng)的,ffrpc-py調(diào)用c++ server的接口,只需要制定輸入消息,然后調(diào)用接口,接收返回消息,像調(diào)用本地函數(shù)一樣直接,這也是rpc lib的存在意義。
- Ffrpc-py 支持protobuf和thrift,當(dāng)然必須和c++ server采用的通信協(xié)議一致。
示例
本例采用c++ sever thrift作為示例。由于ffrpc example目錄的tutorial已經(jīng)實現(xiàn)了一個c++ echo server,本例就利用ffrpc-py調(diào)用echo接口。
其中thrift的定義文件為:
struct echo_thrift_in_t { 1: string data } struct echo_thrift_out_t { 1: string data }
使用ffrpc-py調(diào)用echo接口:
HOST = '127.0.0.1' PORT = 10246 ffc = ffclient_t(HOST, PORT, 1.5) # 1.5 sec為調(diào)用超時時間 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接口的參數(shù)的解釋:
- ffclient_t(HOST, PORT, 1.5) 構(gòu)造函數(shù)的參數(shù)為broker的監(jiān)聽地址和端口。Ffrpc-py只需要知道broker的位置,至于調(diào)用的是哪個服務(wù)器的接口,這個由broker確定,至于目標(biāo)服務(wù)器是跟broker在同一個進(jìn)程,還是通過網(wǎng)絡(luò)連接,ffrpc-py無需知道細(xì)節(jié)。
- call 接口調(diào)用遠(yuǎn)程的服務(wù)器接口,參數(shù)一為c++server接口注冊的服務(wù)名,ffrpc-py只需要知道服務(wù)名就可以定位目標(biāo)服務(wù)器的位置
- call第二個參數(shù)為請求參數(shù)
- call第三個參數(shù)為c++ server返回的消息類型,如果call返回true,那么該消息會被自動賦上值
- 第四個參數(shù)為消息的命名空間,比如定義thrift的文件的時候定義了命名空間,那么需要第四個參數(shù)填入命名空間,這里跟C++ server的注冊的消息一致即可,如果C++ server也沒有消息的命名空間,那么省略這個參數(shù)即可
- Call接口成功返回True,失敗為false,同時error_msg接口可以輸出錯誤原因
總結(jié)
Ffrpc提供了python lib,可以實現(xiàn)py與c++ server的通信,這樣利用python編寫工具、后臺都更加方便了。
同時ffrpc將會對于php進(jìn)行支持,相應(yīng)的client lib 不久就會開放出來。
Github: https://github.com/fanchy/FFRPC
c++ server 的實現(xiàn)介紹參見:http://www.dbjr.com.cn/article/168369.htm
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Keras深度學(xué)習(xí)模型Sequential和Model詳解
這篇文章主要介紹了Keras深度學(xué)習(xí)模型Sequential和Model詳解,在Keras中有兩種深度學(xué)習(xí)的模型:序列模型(Sequential)和通用模型(Model),差異在于不同的拓?fù)浣Y(jié)構(gòu),,需要的朋友可以參考下2023-08-08Python中識別圖片/滑塊驗證碼準(zhǔn)確率極高的ddddocr庫詳解
驗證碼的種類有很多,它是常用的一種反爬手段,包括:圖片驗證碼,滑塊驗證碼,等一些常見的驗證碼場景。這里推薦一個簡單實用的識別驗證碼的庫?ddddocr?(帶帶弟弟ocr)庫,希望大家喜歡2023-02-02Pycharm連接遠(yuǎn)程服務(wù)器并遠(yuǎn)程調(diào)試的全過程
PyCharm 是 JetBrains 開發(fā)的一款 Python 跨平臺編輯器,下面這篇文章主要介紹了Pycharm連接遠(yuǎn)程服務(wù)器并遠(yuǎn)程調(diào)試的全過程,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下2021-06-06Python json模塊與jsonpath模塊區(qū)別詳解
這篇文章主要介紹了Python json模塊與jsonpath模塊區(qū)別詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-03-03Python函數(shù)基礎(chǔ)實例詳解【函數(shù)嵌套,命名空間,函數(shù)對象,閉包函數(shù)等】
這篇文章主要介紹了Python函數(shù)基礎(chǔ),結(jié)合實例形式詳細(xì)分析了函數(shù)嵌套,命名空間,函數(shù)對象,閉包函數(shù)等相關(guān)概念、原理、用法及操作注意事項,需要的朋友可以參考下2019-03-03Python將字符串常量轉(zhuǎn)化為變量方法總結(jié)
在本篇內(nèi)容里我們給大家整理了一篇關(guān)于Python將字符串常量轉(zhuǎn)化為變量方法的知識點總結(jié),有需要的朋友們學(xué)習(xí)下。2019-03-03