定义服务
在服务器端中新建一个类,继承于ServerProvider类(或实现IServerProvider),然后在该类中写公共方法,并用TouchRpc属性标签标记,如果方法有重载,需要重新指定函数键。
- 支持out,ref关键字。
支持代理生成注释。
public class MyRpcServer : ServerProvider{[Description("登录")][TouchRpc]public bool Login(string account,string password){if (account=="123"&&password=="abc"){return true;}return false;}}
创建服务解析器
服务解析器是实际的服务接收、触发、调用、反馈的实际载体,通俗来说就是通信服务器。
【TcpTouchRpc解析器】
这是基于TCP协议的特定RRQM数据格式解析器。在该解析器中,设置类似TcpService。
/// <summary>/// 解析器是实际的逻辑服务器,此处是<see cref="TcpTouchRpcService"/>。/// </summary>/// <returns></returns>static IRpcParser CreateParser(){return new RRQMConfig()//配置.SetListenIPHosts(new IPHost[] { new IPHost(7789) }).SetMaxCount(10000).SetThreadCount(100).SetVerifyToken("TouchRpc").BuildWithTcpTouchRpcService();//此处build相当于new TcpTouchRpcService,然后Setup,然后Start。}
【HttpTouchRpc解析器】
这是基于Http升级协议的特定RRQM数据格式解析器。在该解析器中,设置类似HttpService。
/// <summary>/// 此处是<see cref="HttpTouchRpcService"/>。/// </summary>/// <returns></returns>static IRpcParser CreateHttpParser(){return new RRQMConfig()//配置.SetListenIPHosts(new IPHost[] { new IPHost(7790) }).SetMaxCount(10000).SetThreadCount(100).SetVerifyToken("TouchRpc").BuildWithHttpTouchRpcService();//此处build相当于new HttpTouchRpcService,然后Setup,然后Start。}
【UdpRpc解析器】
这是基于UDP协议的特定RRQM数据格式解析器。在该解析器中,设置类似UdpSession。
/// <summary>/// 此处是<see cref="UdpTouchRpc"/>。/// </summary>/// <returns></returns>static IRpcParser CreateUdpParser(){RRQMConfig config = new RRQMConfig();return config.SetBindIPHost(7791).SetBufferLength(1024 * 10).SetThreadCount(10).BuildWithUdpTouchRpc();}
注册、发布服务
添加解析器(添加时需要以键、值方式添加,方便后续查找),然后注册服务即可。
示例仅演示TCP部分。
static void Main(string[] args){RpcStore rpcStore = new RpcStore();rpcStore.ProxyUrl = "/proxy";//代理urlrpcStore.OnRequestProxy = (request) =>//此处做请求验证,保证代理文件安全。{if (request.TryGetQuery("token",out string value)&&value == "123"){return true;}return false;};rpcStore.AddRpcParser("tcpTouchRpcParser", CreateTcpParser());rpcStore.AddRpcParser("httpTouchRpcParser", CreateHttpParser());rpcStore.AddRpcParser("udpTouchRpcParser", CreateUdpParser());//注册当前程序集的所有服务rpcStore.RegisterServer<MyRpcServer>();//分享代理,代理文件可通过RRQMTool,或者浏览器获取,远程获取。//http://127.0.0.1:8848/proxy?proxy=all&token=123rpcStore.ShareProxy(new IPHost(8848));//或者直接本地导出代理文件。ServerCellCode[] codes = rpcStore.GetProxyInfo(RpcStore.ProxyAttributeMap.Values.ToArray());string codeString = CodeGenerator.ConvertToCode("RRQMProxy", codes);Console.WriteLine(codeString);Console.WriteLine("服务器已启动");Console.ReadKey();}
