python echo(msg) 字符串_GitHub - jackdai123/msgpack-svrkit: 基于msgpack的服务框架,根据IDL动态生成rpc或普通服务代码及其客户端,支持c...

msgpack-svrkit简介

msgpack-svrkit是一个用来生成cpp、python等多语言服务框架(skeleton)的工具,主要为了提升后台工程师的开发效率,特点如下:

基于msgpack的rpc :msgpack是一个快速精巧的二进制打包协议,支持超过50种开发语言,基于msgpack可以容易的跨语言开发

IDL描述文件 :使用msgpack-svrkit生成服务代码前,需书写IDL文件,定义服务名称、服务工作模式、rpc接口和协议、客户端分布方式等等

两种服务模式 :支持rpc和普通服务两种服务模式

多种工作模式 :支持多进程、多线程、协程工作模式

多种客户端分布方式:暂时只支持分片、一致性哈希两种分布方式

IDL描述文件

IDL描述文件是一个json文件,主要包括rpc协议、客户端分布、rpc服务描述、普通服务描述四部分:

1. rpc协议

定义rpc协议数据结构,对应描述文件中的protos字段

name:定义数据结构的名称

fields:定义数据结构包含的字段

fields.name:定义一个字段的名称

fields.type:定义一个字段的数据类型,支持类型有string、bool、int、float、list、dict、自定义数据结构

fields.subtype:定义一个字段数据类型的子类型,支持子类型有string、bool、int、float、自定义数据结构

如下json片段定义了包含3个字段、名叫echomsg的数据结构,其中vec_string是个字符串数组、dict_float是key为整形、value为浮点型的字典

另外一个数据结构response支持数据结构嵌套,内部嵌套了之前定义的echomsg

"protos": [{

"name": "echomsg",

"fields": [{

"name": "my_bool",

"type": "bool"

},{

"name": "vec_string",

"type": "list",

"subtype": "string"

},{

"name": "dict_float",

"type": "dict",

"subtype": "int:float"

}]

},{

"name": "response",

"fields": [{

"name": "echo",

"type": "echomsg"

},{

"name": "vec_echo",

"type": "list",

"subtype": "echomsg"

},{

"name": "dict_echo",

"type": "dict",

"subtype": "int:echomsg"

}]

}]

2. 客户端分布

msgpack-svrkit由客户端来决定路由,即请求发送到哪台服务器,对应描述文件中的rpc_client.mode字段,目前只支持sharding和hashring两种模式

hashring:即一致性哈希分布方式,适合无状态服务

sharding:根据客户端ID分片,适合有状态服务,比如存储服务

如下json片段定义使用hashring分布方式

"rpc_client": {

"mode": "hashring"

}

3. rpc服务描述

定义rpc服务,对应描述文件中的rpc_server字段

ip:定义rpc服务监听的ip,比如127.0.0.1

port:定义rpc服务监听的端口,比如3000

worker_type:定义工作模式,只支持process和thread两种

worker_sum:定义rpc工作者的数量

apis:定义服务提供的接口

apis.name:定义接口的名称

apis.req_proto: 定义接口请求的数据类型,见rpc协议

apis.res_proto: 定义接口响应的数据类型,见rpc协议

如下json片段定义一个多线程、有4个rpc接口的echo服务

"rpc_server": {

"ip": "0.0.0.0",

"port": 3000,

"worker_type": "thread",

"worker_sum": 4,

"apis": [{

"name": "echo1",

"req_proto": "echomsg",

"res_proto": "echomsg"

},{

"name": "echo2",

"res_proto": "echomsg"

},{

"name": "echo3"

},{

"name": "echo4",

"req_proto": "echomsg"

}]

}

4. 普通服务描述

定义普通服务,即不接受rpc请求的后台服务,对应描述文件中的self_server字段

dispatch_type:支持simple和custom两种,simple会生成worker_sum个工作者,做同样的任务;custom会生成若干个工作组,工作组之间做不同的任务

worker_type:支持process、thread、coroutine和process_coroutine四种,其中process_coroutine会生成worker_sum个进程、每个进程coroutine_sum个协程

如下json片段是一些常见的例子

"self_server": {

"dispatch_type": "simple",

"worker_type": "thread",

"worker_sum": 4

}

"self_server": {

"dispatch_type": "simple",

"worker_type": "process_coroutine",

"worker_sum": 2,

"coroutine_sum": 100

}

"self_server": {

"dispatch_type": "custom",

"worker_type": "process",

"groups" : [{

"group_name": "event",

"worker_sum": 2

},{

"group_name": "value",

"worker_sum": 2

}]

}

"self_server": {

"dispatch_type": "custom",

"worker_type": "process_coroutine",

"groups" : [{

"group_name": "event",

"worker_sum": 2,

"coroutine_sum": 100

},{

"group_name": "value",

"worker_sum": 2,

"coroutine_sum": 100

}]

}

"self_server": {

"dispatch_type": "simple",

"worker_type": "coroutine",

"worker_sum": 100

}

"self_server": {

"dispatch_type": "custom",

"worker_type": "coroutine",

"groups" : [{

"group_name": "event",

"worker_sum": 2

},{

"group_name": "value",

"worker_sum": 3

}]

}

msgpack-svrkit使用

msgpack-svrkit提供gen_svr.py工具,在主目录的bin下面,输入IDL文件和要生成服务的语言即可,下面以echo服务为例说明

~/msgpack-svrkit/bin/gen_svr.py

Usage:

/home/vagrant/msgpack-svrkit/bin/gen_svr.py -f /path/to/svr.json -g lang1,lang2,lang3 -d .

Options:

-f svr description file

-g languages(cpp,python,java) for generate

-d directory of svr code

-h show help

Examples:

/home/vagrant/msgpack-svrkit/bin/gen_svr.py -f /path/to/svr.json -g python -d .

/home/vagrant/msgpack-svrkit/bin/gen_svr.py -f /path/to/svr.json -g python,cpp,java -d .

cd ~ && mkdir echo && cd echo && cp ~/msgpack-svrkit/sample/svr_sample7.json ./echo.json

~/msgpack-svrkit/bin/gen_svr.py -f echo.json -g python,cpp -d .

ls -l

total 16

drwxrwxr-x. 2 vagrant vagrant 4096 Oct 10 06:47 cpp

-rw-rw-r--. 1 vagrant vagrant 635 Oct 10 02:12 echo.json

-rw-rw-r--. 1 vagrant vagrant 45 Oct 10 06:47 __init__.py

drwxrwxr-x. 9 vagrant vagrant 4096 Oct 10 06:47 python

ls -l cpp

total 100

-rw-rw-r--. 1 vagrant vagrant 2454 Oct 10 06:47 config.cpp

-rw-rw-r--. 1 vagrant vagrant 554 Oct 10 06:47 config.h

-rw-rw-r--. 1 vagrant vagrant 1129 Oct 10 06:47 daemon.cpp

-rw-rw-r--. 1 vagrant vagrant 50 Oct 10 06:47 daemon.h

-rwxrwxr--. 1 vagrant vagrant 852 Oct 10 06:47 echo

-rw-rw-r--. 1 vagrant vagrant 239 Oct 10 06:47 echo_rpc_cli.conf

-rw-rw-r--. 1 vagrant vagrant 5130 Oct 10 06:47 echo_rpc_cli.cpp

-rw-rw-r--. 1 vagrant vagrant 1100 Oct 10 06:47 echo_rpc_cli.h

-rw-rw-r--. 1 vagrant vagrant 1352 Oct 10 06:47 echo_rpc_handler.cpp

-rw-rw-r--. 1 vagrant vagrant 493 Oct 10 06:47 echo_rpc_handler.h

-rw-rw-r--. 1 vagrant vagrant 300 Oct 10 06:47 echo_rpc_proto.h

-rw-rw-r--. 1 vagrant vagrant 2815 Oct 10 06:47 echo_rpc_test.cpp

-rw-rw-r--. 1 vagrant vagrant 1143 Oct 10 06:47 echo_rpc_test.h

-rw-rw-r--. 1 vagrant vagrant 117 Oct 10 06:47 echo_svr.conf

-rw-rw-r--. 1 vagrant vagrant 3281 Oct 10 06:47 echo_svr.cpp

-rw-rw-r--. 1 vagrant vagrant 397 Oct 10 06:47 echo_svr.h

-rw-rw-r--. 1 vagrant vagrant 1498 Oct 10 06:47 file_utils.cpp

-rw-rw-r--. 1 vagrant vagrant 274 Oct 10 06:47 file_utils.h

-rw-rw-r--. 1 vagrant vagrant 314 Oct 10 06:47 log_utils.cpp

-rw-rw-r--. 1 vagrant vagrant 263 Oct 10 06:47 log_utils.h

-rw-rw-r--. 1 vagrant vagrant 1470 Oct 10 06:47 Makefile

-rw-rw-r--. 1 vagrant vagrant 1777 Oct 10 06:47 opt_map.cpp

-rw-rw-r--. 1 vagrant vagrant 712 Oct 10 06:47 opt_map.h

-rw-rw-r--. 1 vagrant vagrant 6 Oct 10 06:47 README.md

ls -l python

total 28

-rwxrwxr--. 1 vagrant vagrant 991 Oct 10 06:47 echo

-rw-rw-r--. 1 vagrant vagrant 106 Oct 10 06:47 echo_svr.conf

-rw-rw-r--. 1 vagrant vagrant 8918 Oct 10 06:47 echo_svr.py

drwxrwxr-x. 2 vagrant vagrant 50 Oct 10 06:47 global_init

-rw-rw-r--. 1 vagrant vagrant 45 Oct 10 06:47 __init__.py

-rw-rw-r--. 1 vagrant vagrant 6 Oct 10 06:47 README.md

drwxrwxr-x. 2 vagrant vagrant 70 Oct 10 06:47 rpc_cli

drwxrwxr-x. 2 vagrant vagrant 50 Oct 10 06:47 rpc_handler

drwxrwxr-x. 2 vagrant vagrant 47 Oct 10 06:47 rpc_init

drwxrwxr-x. 2 vagrant vagrant 48 Oct 10 06:47 rpc_proto

drwxrwxr-x. 2 vagrant vagrant 47 Oct 10 06:47 rpc_test

drwxrwxr-x. 2 vagrant vagrant 44 Oct 10 06:47 utils

多语言服务使用细节

反馈与建议

QQ:26126441

微信:david_jlu

你可能感兴趣的:(python,echo(msg),字符串)