apache / brpc

brpc is an Industrial-grade RPC framework using C++ Language, which is often used in high performance system such as Search, Storage, Machine learning, Advertisement, Recommendation etc. "brpc" means "better RPC".
https://brpc.apache.org
Apache License 2.0
16.04k stars 3.92k forks source link

brpc Stream导致普通RPC无法解析 #2677

Closed howarle closed 1 day ago

howarle commented 5 days ago

Describe the bug (描述bug) 当同一个brpc::Server中同时存在Stream和普通 RPC,普通RPC将无法解析,报错为:

E20240703 08:42:11.077316 1409359 input_messenger.cpp:123] Fail to parse response from 127.0.0.1:12306 by streaming_rpc at client-side
W20240703 08:42:11.077428 1409359 input_messenger.cpp:249] Close Socket{id=2 fd=8 addr=127.0.0.1:12306:53862} (0x631000014d00): absolutely wrong message
E20240703 08:42:11.077787 1409308 stream_test.cc:138] Fail to send rpc [E22]Close Socket{id=2 fd=8 addr=127.0.0.1:12306:53862} (0x0x631000014d00): absolutely wrong message

之前也有issue讨论过这个问题,但最后不了了之 https://github.com/apache/brpc/issues/392

To Reproduce (复现方法)

最小复现代码:https://github.com/howarle/brpc_benchmark/blob/main/src/stream_test.cc 复现率100%

Expected behavior (期望行为)

目前只能将普通RPC与stream分开两个server,但正常情况下同一个server也应当能够正常两种方案正常同时运行。

Versions (各种版本) OS: Ubuntu 22.04 Compiler: Clang++ 15.0.7 brpc: 1.9.0 protobuf:

Additional context/screenshots (更多上下文/截图)