lvzixun / sproto-Csharp

A pure C# implementation of sproto.
140 stars 53 forks source link

sproto-Csharp只支持单向RPC吗? #4

Closed puXiaoyi closed 8 years ago

puXiaoyi commented 8 years ago

TestCaseRpc.cs

SprotoRpc client = new SprotoRpc ();
SprotoRpc service = new SprotoRpc (Protocol.Instance);
SprotoRpc.RpcRequest clientRequest = client.Attach (Protocol.Instance);

sproto-Csharp只支持单向RPC吗?这里好像默认client只有type和session的package信息,没有protocol内容。 如果c2s和s2c各有一份协议文件,如云风的sproto项目里的testrpc.ua,怎么来实现? 用sprotodump.lua依次生成的话,Protocol.cs只会生成一份保留后一次的结构。

lvzixun commented 8 years ago

lua sprotodump.lua -cs <your_sproto_file ...> -p <packagename> 你可以在后面添加-p <packagename> ,将会指定生成<packagename>Protocol.cs,同时对应的sprotoType命名空间也会添加<packagename>前缀。

PS: 不过我们现在用的sproto lua版本都不区分client和server了,客户端和服务器用的是同一份sproto协议文件,只是在定义protocol时,说明这个是客户端请求还是服务器推送协议。

puXiaoyi commented 8 years ago

你的意思是在同一份sproto协议文件里,约定一些tag是c2s,另一部分是s2c的?

使用的时候类似

SprotoRpc.RpcRequest clientRequest = client.Attach (Protocol.Instance);

服务器推送请求写成

SprotoRpc.RpcRequest serverRequest = server.Attach (Protocol.Instance);

lvzixun commented 8 years ago

客户端如下:

SprotoRpc client = new SprotoRpc (Protocol.Instance);
SprotoRpc.RpcRequest clientRequest = client.Attach (Protocol.Instance);

服务器的话,也是如此。