brpc多协议解析处理
server端会⾃动尝试其⽀持的协议,⽆需⽤户指定。cntl->protocol()可获得当前协议。server能从⼀个listen端⼝建⽴不同协议的连接,不需要为不同的协议使⽤不同的listen端⼝,⼀个连接上也可以传输多种协议的数据包, 但⼀般不会这么做(也不建议)。
下⾯分析⼀下这部分实现:
在服务端接到新数据之后会调⽤CutInputMessage。
_handlers中保存⽀持的协议配置。
parse error怎么解决⾸先使⽤上次成功的协议解析 _handlers[preferred].parse,如果成功return;
如果失败继续for循环解析,成功就到了对应的协议,如果失败继续。
成功后会执⾏set_preferred_index设置上⼀次使⽤的协议,这种⽅式不适合多个协议频繁切换的请求。