产品及架构介绍
定义
定义
一、说明
JsonRpc是通用的Rpc规范,与编程语言无关、操作系统无关。详细说明请参阅JsonRpc 2.0 官方文档,在TouchSocket中封装了前后端,使其使用更加方便、高效。
目前支持Tcp
、Http
、WebSocket
三种协议调用。
二、特点:
- 异常反馈 。
- 插件支持。
- 支持自定义类型。
- 支持类型嵌套。
- 支持js、Android等调用。
- 支持服务器主动调用客户端
三、定义服务
在服务器端中新建一个类,继承于RpcServer
类(或实现IRpcServer
),然后在该类中写公共方法,并用JsonRpc特性标签标记。
public partial class JsonRpcServer : RpcServer
{
/// <summary>
/// 使用调用上下文。
/// 可以从上下文获取调用的SessionClient。从而获得IP和Port等相关信息。
/// </summary>
/// <param name="callContext"></param>
/// <param name="str"></param>
/// <returns></returns>
[JsonRpc(MethodInvoke =true)]
public string TestGetContext(ICallContext callContext, string str)
{
if (callContext.Caller is IHttpSessionClient SessionClient)
{
if (SessionClient.Protocol == Protocol.WebSocket)
{
Console.WriteLine("WebSocket请求");
var client = callContext.Caller as IHttpSessionClient;
var ip = client.IP;
var port = client.Port;
Console.WriteLine($"WebSocket请求{ip}:{port}");
}
else
{
Console.WriteLine("HTTP请求");
var client = callContext.Caller as IHttpSessionClient;
var ip = client.IP;
var port = client.Port;
Console.WriteLine($"HTTP请求{ip}:{port}");
}
}
else if (callContext.Caller is ITcpSessionClient)
{
Console.WriteLine("Tcp请求");
var client = callContext.Caller as ITcpSessionClient;
var ip = client.IP;
var port = client.Port;
Console.WriteLine($"Tcp请求{ip}:{port}");
}
return "RRQM" + str;
}
[JsonRpc(MethodInvoke = true)]
public JObject TestJObject(JObject obj)
{
return obj;
}
[JsonRpc(MethodInvoke = true)]
public string TestJsonRpc(string str)
{
return "RRQM" + str;
}
}
备注
设置MethodInvoke = true
,即以方法名作为调用键,这也是JsonRpc规范所规定。但同时框架内部还支持另一种方式,即默认情况下会使用方法的全名称小写作为调用键(即:命名空间.类名.方法名)
四、启动服务器
JsonRpc支持多个基本协议的服务器,所以下面将一一介绍。
更多注册Rpc的方法请看注册Rpc服务