定义服务
在服务器端中新建一个类,继承于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";//代理url
rpcStore.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=123
rpcStore.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();
}