2.2.2 Python实现
1.服务端实现
demo_py 目录下新建 Python 文件 demo03_server_py.py,输入如下内容:
#!/usr/bin/env python3
"""
需求:实现请求响应
实现:
1.导包;
2.初始化 cyber 框架;
3.创建服务节点;
4.创建服务方;
5.处理请求;
6.关闭。
"""
from cyber.python.cyber_py3 import cyber
from cyber.demo_base_proto.addints_pb2 import AddInts_Request
from cyber.demo_base_proto.addints_pb2 import AddInts_Response
def cb(req):
num1 = req.num1
num2 = req.num2
print("num1: %d, num2 %d"%(num1,num2))
sum = num1 + num2
response = AddInts_Response()
response.sum = sum
return response
if __name__ == "__main__":
cyber.init()
print("server.....")
# 3.创建服务节点;
server_node = cyber.Node("server_node")
# 4.创建服务方;
server = server_node.create_service("addints",AddInts_Request,AddInts_Response,cb)
server_node.spin()
# 5.处理请求;
# 6.关闭。
cyber.shutdown()
配置文件BUILD添加内容如下:
py_binary(
name = "demo03_server_py",
srcs = ["demo03_server_py.py"],
deps = [
"//cyber/python/cyber_py3:cyber",
"//cyber/demo_base_proto:addints_proto_py"
]
)
2.客户端实现
demo_py 目录下新建 Python 文件 demo04_client_py.py,输入如下内容:
#!/usr/bin/env python3
"""
需求:发送两个数字到服务端,并处理响应
实现:
1.导包;
2.初始化;
3.创建节点;
4.创建客户端;
5.发送数据处理响应;
6.等待关闭。
"""
from cyber.python.cyber_py3 import cyber
from cyber.demo_base_proto.addints_pb2 import AddInts_Request
from cyber.demo_base_proto.addints_pb2 import AddInts_Response
import sys
if __name__ == "__main__":
if len(sys.argv) != 3:
print("请输入两个参数")
sys.exit(1)
cyber.init()
print("client...... ")
# 3.创建节点;
client_node = cyber.Node("client_node")
# 4.创建客户端;
client = client_node.create_client("addints",AddInts_Request,AddInts_Response)
# 5.发送数据处理响应;
req = AddInts_Request()
req.num1 = int(sys.argv[1])
req.num2 = int(sys.argv[2])
response = client.send_request(req)
print("response sum = %d "%response.sum)
# 6.等待关闭。
cyber.shutdown()
配置文件BUILD添加内容如下:
py_binary(
name = "demo04_client_py",
srcs = ["demo04_client_py.py"],
deps = [
"//cyber/python/cyber_py3:cyber",
"//cyber/demo_base_proto:addints_proto_py"
]
)
3.编译执行
编译:
bazel build cyber/demo_py/...
执行(需要两个终端):
终端A执行发布方:
source cyber/setup.bash
./bazel-bin/cyber/demo_py/demo03_server_py
终端B执行订阅方:
source cyber/setup.bash
./bazel-bin/cyber/demo_py/demo04_client_py 30 50
最终运行结果与本章引言部分的案例2类似。