定义服务

服务器端中新建一个类,继承于ServerProvider类(或实现IServerProvider),然后在该类中写公共方法,并用TouchRpc属性标签标记,如果方法有重载,需要重新指定函数键

  • 支持outref关键字。
  • 支持代理生成注释

    1. public class MyRpcServer : ServerProvider
    2. {
    3. [Description("登录")]
    4. [TouchRpc]
    5. public bool Login(string account,string password)
    6. {
    7. if (account=="123"&&password=="abc")
    8. {
    9. return true;
    10. }
    11. return false;
    12. }
    13. }

    创建服务解析器

    服务解析器是实际的服务接收、触发、调用、反馈的实际载体,通俗来说就是通信服务器

TcpTouchRpc解析器】
这是基于TCP协议的特定RRQM数据格式解析器。在该解析器中,设置类似TcpService

  1. /// <summary>
  2. /// 解析器是实际的逻辑服务器,此处是<see cref="TcpTouchRpcService"/>。
  3. /// </summary>
  4. /// <returns></returns>
  5. static IRpcParser CreateParser()
  6. {
  7. return new RRQMConfig()//配置
  8. .SetListenIPHosts(new IPHost[] { new IPHost(7789) })
  9. .SetMaxCount(10000)
  10. .SetThreadCount(100)
  11. .SetVerifyToken("TouchRpc")
  12. .BuildWithTcpTouchRpcService();//此处build相当于new TcpTouchRpcService,然后Setup,然后Start。
  13. }

HttpTouchRpc解析器】
这是基于Http升级协议的特定RRQM数据格式解析器。在该解析器中,设置类似HttpService

  1. /// <summary>
  2. /// 此处是<see cref="HttpTouchRpcService"/>。
  3. /// </summary>
  4. /// <returns></returns>
  5. static IRpcParser CreateHttpParser()
  6. {
  7. return new RRQMConfig()//配置
  8. .SetListenIPHosts(new IPHost[] { new IPHost(7790) })
  9. .SetMaxCount(10000)
  10. .SetThreadCount(100)
  11. .SetVerifyToken("TouchRpc")
  12. .BuildWithHttpTouchRpcService();//此处build相当于new HttpTouchRpcService,然后Setup,然后Start。
  13. }

【UdpRpc解析器】
这是基于UDP协议的特定RRQM数据格式解析器。在该解析器中,设置类似UdpSession

  1. /// <summary>
  2. /// 此处是<see cref="UdpTouchRpc"/>。
  3. /// </summary>
  4. /// <returns></returns>
  5. static IRpcParser CreateUdpParser()
  6. {
  7. RRQMConfig config = new RRQMConfig();
  8. return config.SetBindIPHost(7791)
  9. .SetBufferLength(1024 * 10)
  10. .SetThreadCount(10)
  11. .BuildWithUdpTouchRpc();
  12. }

注册、发布服务

添加解析器(添加时需要以键、值方式添加,方便后续查找),然后注册服务即可。

示例仅演示TCP部分。

  1. static void Main(string[] args)
  2. {
  3. RpcStore rpcStore = new RpcStore();
  4. rpcStore.ProxyUrl = "/proxy";//代理url
  5. rpcStore.OnRequestProxy = (request) =>//此处做请求验证,保证代理文件安全。
  6. {
  7. if (request.TryGetQuery("token",out string value)&&value == "123")
  8. {
  9. return true;
  10. }
  11. return false;
  12. };
  13. rpcStore.AddRpcParser("tcpTouchRpcParser", CreateTcpParser());
  14. rpcStore.AddRpcParser("httpTouchRpcParser", CreateHttpParser());
  15. rpcStore.AddRpcParser("udpTouchRpcParser", CreateUdpParser());
  16. //注册当前程序集的所有服务
  17. rpcStore.RegisterServer<MyRpcServer>();
  18. //分享代理,代理文件可通过RRQMTool,或者浏览器获取,远程获取。
  19. //http://127.0.0.1:8848/proxy?proxy=all&token=123
  20. rpcStore.ShareProxy(new IPHost(8848));
  21. //或者直接本地导出代理文件。
  22. ServerCellCode[] codes = rpcStore.GetProxyInfo(RpcStore.ProxyAttributeMap.Values.ToArray());
  23. string codeString = CodeGenerator.ConvertToCode("RRQMProxy", codes);
  24. Console.WriteLine(codeString);
  25. Console.WriteLine("服务器已启动");
  26. Console.ReadKey();
  27. }