Open lucasjinreal opened 2 years ago
暂时还不支持 json 协议哦
原来是同厂的大佬,哈哈。 目前还没支持 json 协议,后续有考虑支持json格式的计划.
大佬好,意思是json也是可以是吗,protobuf感觉依赖比较麻烦哎。为啥不直接用json呢
json这块我也不知道怎么弄好, 是直接 json 传数据(外面加一下自定义的包头), 还是说 http 请求体里面加 json。 我个人有点倾向于 Http 请求体里面包 json 字符串,然后服务端增加下json解析。大佬有什么高见不
老实说,我不太懂后端的东西,我搞人工智障的,这里面这个用法:
tinyrpc::TinyPbRpcChannel channel(std::make_shared<tinyrpc::IPAddress>("127.0.0.1", 39999));
QueryService_Stub stub(&channel);
假如说我有很多个API,例如login register, post_article, 之类的接口,怎么在channel里面区分啊,这channel直接就写死了一个路径
channel 不需要区分,就每次调用 RPC 的时候,都需要初始化一个 TinyPbRpcChannel 对象。 如果是有多个接口,比如 login register,目前的做法是 先把 proto 文件加上这些接口, 然后调用 QueryService_Stub.login() , QueryService_Stub.register 方法就可以了
你说的 channel 写死路径指的是啥啊,是指这里指定了对端服务的 ip:port吗
那比如我的客户端是flutter,我怎么在dart里面去调用login register啊
抱歉,我没用过 flutter 不太懂。哈哈哈。 不过如果是外部客户端想调用 rpc 服务,我觉得rpc服务应该提供 HTTP 协议的接口这种比较规范的。 protobuf 更适用于内部服务之间的相互调用。 对外就提供HTTP
或者说你期望以哪种形式调用,可以给我个简单的示例吗。
@Gooddbird 那比如说python里面,要吊用tinyrpc,有势力吗
这个还没有,如果服务端是 protobuf 协议的话,目前只有 c++ 调用。 我后面看看怎么解决这个问题
但是讲道理,他不应该是与客户端无关并且跨语言的吗
嗯嗯,是这样的。本身现在支持两种协议, 一种是标准的 HTTP 协议, 这个不说了,肯定是客户端无关并且跨语言的,随便什么语言都能构造HTTP请求包。这种协议一般提供给外部调用。 另外一个是自定义的 TinyPB 协议,这个协议是基于 protobuf 的。这种自定义协议由于自己扩展了一些包头,加了一些字段如起始标志符,包长度等。而且加这些字段是必要的, 因为不可能只传 protobuf 二进制的字节流,因为服务端没法解包,甚至连包的起始和结束位置都找不到。 所以这种自定义的协议,一般适用于公司内部多个服务之前相互调用。 如果要跨语言的话,这时候需要把你的协议编解码格式提供给客户端才行,比如提供一套 TinyPB 协议的编解码api接口,客户端先用api编码之后再发送才行。 我下来也看了一下其他的 RPC 实现,事实上也可以用 json 来序列化。 客户端只需要传入纯 json 字符串就行了,当然要按照一定的格式, 比如 {method: "xxx", param: "xxx"} 这种,然后服务端按这个格式解包并且进行处理。所以支持json协议也是可以的,这个我后面可以实现一下,大佬如果有兴趣的话也可以指定下或者参与进来。
如果考虑跨端夸语言的话哪种方式好一些? protobuf应该包体积更小,传输更快,json得还得反序列化肯定没有protobuf快,但json好在无依赖,protobuf对于一些比较特殊的端,例如dart,或者是对体积要求很小的APP,再加上一个protobuf的依赖感觉比较重。
业内有比较成熟的对比和应用案例吗
问个无关问题,协议可以用json吗