C# 创建基于TCP、HTTP协议的JsonRpc 2.0(可跨平台、跨语言)

文章目录

    • 一、序言
        • 1.1 RRQMSocket.RPC.JsonRpc特点
    • 二、程序集源码、Demo下载
        • 2.1 源码位置
        • 2.2 Demo位置
    • 三、安装
    • 四、创建JsonRpc服务器
        • 4.1 创建服务
        • 4.2 创建基于TCP协议的JsonRpc解析器
        • 4.3 创建基于HTTP协议的JsonRpc解析器
        • 4.4 注册服务、启动RPC服务器
    • 五、简单调用
        • 5.1 使用“网络调试助手”以TCP协议调用
        • 5.2 使用“Postman”以HTTP协议调用
    • 六、C#客户端调用
    • 七、C#代理客户端调用
        • 7.1 获取代理文件
        • 7.2 通过代理调用


一、序言

JSON-RPC是一个无状态且轻量级的远程过程调用(RPC)协议。 其使用JSON(RFC 4627)作为数据格式,它的调用与语言,平台无关,且可以直接应用于Web等。

1.1 RRQMSocket.RPC.JsonRpc特点
  • 高性能、多线程。
  • 支持TCP、HTTP协议。
  • 支持自定义数据类型与自定义类型嵌套。
  • 支持内联调用,可与C#的初始值设定完美配合。
  • C#端支持客户端快捷调用和代理调用。

二、程序集源码、Demo下载

2.1 源码位置
  • Gitee
  • Github
2.2 Demo位置
  • RRQMBox Gitee
  • RRQMBox Github

三、安装

安装RRQMSocket.RPC.JsonRpc即可,具体步骤详看链接博客。

VS、Unity安装和使用Nuget包

四、创建JsonRpc服务器

4.1 创建服务

新建类文件,命名为Server,继承自ServerProvider,然后添加一个方法,使用【JsonRpc】标记。

public class Server: ServerProvider
{
    [JsonRpc]
    public string TestJsonRpc(string str)
    {
        return "RRQM";
    }
 }
4.2 创建基于TCP协议的JsonRpc解析器
static IRPCParser CreateTcpJsonRpcParser()
{
    JsonRpcParser jsonRpcParser = new JsonRpcParser();
    
    JsonRpcParserConfig config = new JsonRpcParserConfig();
    config.ProtocolType = JsonRpcProtocolType.Tcp;//使用Tcp协议,调用时,有且仅有调用消息末尾追加“\r\n”。否则会调用失败。
    config.ListenIPHosts = new RRQMSocket.IPHost[] { new RRQMSocket.IPHost(7705)};
    config.ProxyToken = "RPC";//生成代理时需要验证
    
    jsonRpcParser.Setup(config);
    jsonRpcParser.Start();
    Console.WriteLine("TCP协议的JsonRpc已启动");
    return jsonRpcParser;
}

4.3 创建基于HTTP协议的JsonRpc解析器
static IRPCParser CreateHTTPJsonRpcParser()
{
    JsonRpcParser jsonRpcParser = new JsonRpcParser();

    JsonRpcParserConfig config = new JsonRpcParserConfig();
    config.ProtocolType = JsonRpcProtocolType.Http;//使用Tcp协议,调用时,有且仅有调用消息末尾追加“\r\n”。否则会调用失败。
    config.ListenIPHosts = new RRQMSocket.IPHost[] { new RRQMSocket.IPHost(7706) };
    config.ProxyToken = "RPC";//生成代理时需要验证
    
    jsonRpcParser.Setup(config);
    jsonRpcParser.Start();
    Console.WriteLine("HTTP协议的JsonRpc已启动");
    return jsonRpcParser;
}

4.4 注册服务、启动RPC服务器
static void Main(string[] args)
{
    RPCService rpcService = new RPCService();
   
    rpcService.AddRPCParser("tcpJsonRpcParser ", CreateTcpJsonRpcParser());
    rpcService.AddRPCParser("httpJsonRpcParser ", CreateHTTPJsonRpcParser());

    rpcService.RegisterServer<Server>();//注册服务
    Console.WriteLine("RPC服务已启动");
    Console.ReadKey();
}

五、简单调用

服务在启动以后,即可调用。具体的数据格式请参照JSON-RPC 2.0 Specification。

下面将进行简单示例调用。

5.1 使用“网络调试助手”以TCP协议调用

在服务启动后,启动网络调试助手连接,然后按图中配置,使用以下字符串测试调用。

注意: 在输入框中输入调用字符串后,需要按住Shift键+回车键,相当于在输入框中添加“\r\n”字符。

{"jsonrpc":"2.0","method":"TestJsonRpc","params":[5],"id":1}

C# 创建基于TCP、HTTP协议的JsonRpc 2.0(可跨平台、跨语言)_第1张图片

5.2 使用“Postman”以HTTP协议调用

调用时,可以使用GET、Post。Body类型也无所谓固定。但是Body的内容必须是满足JsonRpc 2.0的数据标准。

{"jsonrpc":"2.0","method":"TestJsonRpc","params":[5],"id":1}

C# 创建基于TCP、HTTP协议的JsonRpc 2.0(可跨平台、跨语言)_第2张图片

六、C#客户端调用

JsonRpc在C#的语言下,RRQM提供了快捷调用客户端供大家使用。详细过程如下:

【TCP协议调用】

static void TestTcpJsonRpcParser()
{
    JsonRpcClient jsonRpcClient = new JsonRpcClient();

    var config = new JsonRpcClientConfig();
    config.ProtocolType = JsonRpcProtocolType.Tcp;
    config.RemoteIPHost = new RRQMSocket.IPHost("127.0.0.1:7705");

    jsonRpcClient.Setup(config);

    jsonRpcClient.Connect();
    Console.WriteLine("连接成功");

    while (true)
    {
        string result = jsonRpcClient.Invoke<string>("TestJsonRpc", InvokeOption.WaitInvoke, Console.ReadLine());
        Console.WriteLine($"返回结果:{result}");
    }
}

【HTTP协议调用】

static void TestHttpJsonRpcParser()
{
    JsonRpcClient jsonRpcClient = new JsonRpcClient();

    var config = new JsonRpcClientConfig();
    config.ProtocolType = JsonRpcProtocolType.Http;
    config.RemoteIPHost = new RRQMSocket.IPHost("127.0.0.1:7706");

    jsonRpcClient.Setup(config);

    jsonRpcClient.Connect();
    Console.WriteLine("连接成功");

    while (true)
    {
        string result = jsonRpcClient.Invoke<string>("TestJsonRpc", InvokeOption.WaitInvoke, Console.ReadLine());
        Console.WriteLine($"返回结果:{result}");
    }
}

七、C#代理客户端调用

上述调用,已经基本上可以满足调用了,但是当方法太多,且参数如果不是基础类型时,C#调用会变得异常麻烦。这时候,生成代理文件,然后调用,就变得很重要了。

7.1 获取代理文件

获取代理文件详情

7.2 通过代理调用

此时,代理中会生成Server类,和TestJsonRpc的接口方法。

static void TestProxy()
{
    JsonRpcClient jsonRpcClient = new JsonRpcClient();

    var config = new JsonRpcClientConfig();
    config.ProtocolType = JsonRpcProtocolType.Http;
    config.RemoteIPHost = new RRQMSocket.IPHost("127.0.0.1:7706");

    jsonRpcClient.Setup(config);

    jsonRpcClient.Connect();
    Console.WriteLine("连接成功");

    RRQMProxy.Server server = new RRQMProxy.Server(jsonRpcClient);//载入连接器
    while (true)
    {
        string result = server.TestJsonRpc(Console.ReadLine());
        Console.WriteLine($"返回结果:{result}");
    }
}

你可能感兴趣的:(TouchSocket,json,rpc)