baidu / sofa-pbrpc

A light-weight RPC implement of google protobuf RPC framework.
Other
2.13k stars 655 forks source link

不用官方的客户端程序,要发RPC数据吗? #120

Closed LazyPlanet closed 7 years ago

LazyPlanet commented 7 years ago

你好, 我们打算用这套框架做游戏服务器,但是客户端是基于Unity的C#开发,所以想扩展到根据,不同Message不同处理的模式,客户端如果自己重新写,要改RPCDATA吧?多谢。

qinzuoyan commented 7 years ago

没太明白你问题的意思。

如果你的意图是使用不同的RPC协议(本身支持sofa和http协议),这是可以扩展的,只需要继承RpcRequest和RpcRequestParser,具体可以参考HTTPRpcRequest和HTTPRpcRequestParser的实现。

如果你的意图是使用自己的C#客户端访问server数据,建议一种办法是直接使用Http协议,负载数据使用json格式或者binary格式的Protobuf数据。

LazyPlanet commented 7 years ago

是这样的,我只是想发送个Protocol buff中的Message,不想要Response,咱们这个sofa框架需要写Request和Response吧。我只想Request,至于Response的结果我不想要。不用改底层的rpc_server_message_stream.h的choose_rpc_request_parser()接口吧?

qinzuoyan commented 7 years ago

不用,使用时可以直接忽略调用response。定义protobuf服务时,response可以定于为一个空的Message,譬如:

message XXXResponse {
}
LazyPlanet commented 7 years ago

这个服务器我倒是知道哈,就是客户端发的时候,如果不合法,你们服务器就给我断开了。我是需要在C#里面构造一个你们认为合法的二进制数据吧。就是我应该发什么格式的二进制数据?我的理解是按照https://github.com/baidu/sofa-pbrpc/wiki/RPC%E5%8D%8F%E8%AE%AE 这个构造,然后发给服务器。不知道对不对?多谢您。

LazyPlanet commented 7 years ago

就是我客户端不用官方的C++版本了已经。

qinzuoyan commented 7 years ago

如果你想自己实现C#版本的客户端,有几种选择:

LazyPlanet commented 7 years ago

好的,多谢了。估计需要使用sofa协议,通过C#构造,或者用你们这个架构通过C#调用C++来完成。 多谢多谢。架构很棒,国内做的非常好的架构了。就是感觉和客户端对接的扩展看样子比较麻烦,不过还好。

qinzuoyan commented 7 years ago

多谢鼓励,客户端多语言支持方面确实做得还不够,以后争取支持更多语言

LazyPlanet commented 7 years ago

我们现在用的是ACE+Protocol Buffer,但是不是这种RPC,是客户端给服务器发个PB->处理->发PB给客户端,我一直想重新写个ASIO+Protocol Buffer的服务器框架,后来我们老大看到你这个架构,给我们推荐,我就放弃写了。我觉得你这套东西易于理解,扩展方便。对纯 C++的客户端可以直接用了。哈哈。棒。