trpc-group / trpc-cpp

A pluggable, high-performance RPC framework written in cpp
Other
270 stars 78 forks source link

【腾讯犀牛鸟计划】在tRPC-Cpp的2种runtime下发起对2个下游的调用 #135

Closed weimch closed 1 month ago

weimch commented 2 months ago

issue介绍

tRPC-Cpp提供了协程runtime,用于CPU密集的场景,使用同步编程;框架也提供了线程runtime,用于IO密集的场景,使用Future-Promise异步编程。

你需要使用这两种编程方式分别发起对2个下游服务的调用,并使用腾讯文档输出一份报告到issue回复里,报告需要包含你的实践过程(关键的代码以及日志输出等)以及不同编程方式的使用体会,最后提交相关变更代码到你个人的repo以及编译运行指引到issue回复里,方便我们测试验证你的确完成了issue。

具体地,你可以按下面的步骤完成此issue 1、使用examples/helloworld作为下游,在此基础上,新增一个service,创造两个下游服务。 2、使用examples/features/fiber_forward作为协程runtime的中转服务,在此服务里,使用fiber的工具(查阅fiber用户指南),并发调用两个下游。 3、使用examples/features/future_forward作为线程runtime的中转服务,在此服务里,使用future的Then链(查阅future用户指南),串行地调用两个下游。 4、【可选】除此之外,fiber和future用户指南里,提供了很多易用的接口,你能使用不同于2/3的方式,调用两个下游的调用吗?

参考资料

1、runtime介绍:https://github.com/trpc-group/trpc-cpp/blob/main/docs/zh/runtime.md 2、fiber用户指南:https://github.com/trpc-group/trpc-cpp/blob/main/docs/zh/fiber_user_guide.md 3、future用户指南:https://github.com/trpc-group/trpc-cpp/blob/main/docs/zh/future_promise_guide.md

其他说明

本issue为2024犀牛鸟开源人才培养活动专属issue,仅供在校大学生参与领取 【认领issue】在研学基地"issue营地"对应issue行的M~R列抢滩报名,即视为认领成功。 【完成issue】已认领issue的同学,请同步在本issue评论区回复“已成功领取本issue”; 如7天内无提交任何进展包括不限于comment \ commit \ Pull Request,则将视为同学主动放弃issue,组委会将释放issue给下一位等候者。

Heaven2024 commented 1 month ago

您好,请问这里的要求是否是将如下的代码更改为并发调用两个服务?以fiber举例:

image

新增服务是否是这样定义进行实现呢:)

image
weimch commented 1 month ago

您好,请问这里的要求是否是将如下的代码更改为并发调用两个服务?以fiber举例: image 新增服务是否是这样定义进行实现呢:) image

并发调用你找的代码片段没错(注意用FiberLatch来等待并发调用结束),新增服务可以这样定义。

Heaven2024 commented 1 month ago

修改/新增proto文件添加服务需要重新生成c++文件吧? 然后forward的proto文件也需要修改,这是没问题的吧,担心方法错了

weimch commented 1 month ago

修改/新增proto文件添加服务需要重新生成c++文件吧? 然后forward的proto文件也需要修改,这是没问题的吧,担心方法错了

  1. 改proto文件之后,编译会自动重新生成*.trpc.pb.h/cc文件。
  2. forward的proto文件不需要修改,你需要在forward的一个rpc接口实现里,发起两次下游调用(比如你这个rpc接口,需要调用两个下游,组合数据,然后返回响应)
Heaven2024 commented 1 month ago

感谢解答,这边测试完成效果如下,是否达到要求

image
weimch commented 1 month ago

感谢解答,这边测试完成效果如下,是否达到要求 image

future_forward也需要开发下(这个用Future-Then链串起来调)

Heaven2024 commented 1 month ago

已完成issue要求步骤,相关代码在个人仓库分支runtime 相关目录:trpc-cpp/examples/features/fiber_forward trpc-cpp/examples/features/future_forward 测试步骤: git clone https://github.com/Heaven2024/trpc-cpp && git checkout runtime 测试运行fiber: . run_fiber.sh 测试运行future: . run_future.sh

运行信息位于forward_server.log

weimch commented 1 month ago

有写文档吗?

image
Heaven2024 commented 1 month ago

正在编写中

Heaven2024 commented 1 month ago

你好,对于fiber我有一个疑问,日志中会有如下输出,是预期的行为吗?按我的理解两个并发调用的输出应该符合先后的顺序(again应该在之后)

image

这是并发调用代码

image
weimch commented 1 month ago

你好,对于fiber我有一个疑问,日志中会有如下输出,是预期的行为吗?按我的理解两个并发调用的输出应该符合先后的顺序(again应该在之后) image 这是并发调用代码 image

符合预期的,fiber是并发的,谁先谁后执行不一定。

Heaven2024 commented 1 month ago

我想错了,感谢解答,报告已完成: 【腾讯文档】【腾讯犀牛鸟计划】在tRPC-Cpp的2种runtime下发起对2个下游的调用 https://docs.qq.com/aio/DT3NJc2ltZWdmSHdF

weimch commented 1 month ago

已经测试通过,文档写得很完善,此issue由 @Heaven2024 完成。