文章目录

  • 一、序言
    • 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}

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

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

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

六、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}");}
}

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

  1. 【网络编程】基于TCP/IP协议的C/S模型

    相关视频--C3程序猿-windows网络编程:第一部分tcp/ip 我的小站--半生瓜のblog 基于TCP/IP协议的C/S模型 基于TCP/IP协议的C/S模型 TCP/IP协议 Client/ ...

  2. 《 Python程序设计项目案例》— 用Python开发的基于TCP通讯协议的私人聊天室 (期末大作业、结课作业、课程设计、毕业设计)

    基于Python与TCP协议的私人聊天室(GUI交互界面,用户注册.用户登录.实时聊天,文件上传与下载) 用Python开发的基于TCP通讯协议的实时聊天通讯和文件共享应用 目录 基于Python与T ...

  3. 基于TCP/IP协议 区别 GET和POST

    基于TCP/IP协议讲解GET和POST的区别(转载于博客园) 在我大万维网世界中,TCP就像汽车,我们用TCP来运输数据,它很可靠,从来不会发生丢件少件的现象.但是如果路上跑的全是看起来一模一样的汽 ...

  4. Linux系统下实现基于TCP/IP协议的简单Socket通信

    Linux系统下实现基于TCP/IP协议的简单Socket通信 网络套接字Socket Socket概念 主机字节序和网络字节序 Sockaddr地址结构 Socket实现客户端.服务端通信 服务端程 ...

  5. 基于TCP/IP协议的网络摄像头的QT项目

    目录 项目简述: 1.服务器 步骤一:首先搭建一个基本的服务器框架. 1.初始化服务器的函数主体 2.等待连接 步骤二:数据库的使用,本次项目使用的Sqlite3数据库 1.数据库初始化 2.登录时使 ...

  6. 打印服务器协议,基于TCP/IP协议的嵌入式网络打印服务器设计

    摘要: 随着电子技术和计算机网络技术的发展,嵌入式系统在家庭和工业的各个领域都得到了广泛的应用,各种信息家电,网络设备以及工业控制领域都出现了嵌入式系统的身影,其数量已经远远超过了各种通用计算机.但是 ...

  7. 基于TCP/IP协议的物联网安卓应用开发基础教程(Android Studio开发)

    [华为云IOT物联网论坛外部版主:中华小能能] 第0章 简介 大家好,在上上上期发布的教程中,教大家如何利用Android Studio开发出一款接入华为云物联网平台并调用相关API完成设备属性查询. ...

  8. 基于TCP/IP协议的Java服务端与Android客户端的Socket通信及数据交互

    基于TCP/IP协议的Java服务端与Android客户端的Socket通信及数据交互 一.前言 1.Java服务端程序代码的项目名为TcpSocketServerOfJava,包名为com.exam ...

  9. 上位机服务器通讯协议,基于TCP/IP协议实现上位机对UR机器人的远程控制

    1.引言 2010年,德国学术界和产业界提出"工业4.0"的概念,即是以智能制造为主导的第四次工业革命,或革命性的生产方法.该战略旨在通过充分利用信息通讯技术和网络空间虚拟系统-信 ...

  10. zynq tcp如何从网口发数据_基于TCP/IP协议的电口通信

    之前有介绍过TCP/IP协议的实现是通过轻量级LWIP协议实现的,具体在FPGA中实现又可以分为多种方式,具体如下: 图8‑98 LWIP协议在FPGA中的实现方式 LWIP可以通过硬核实现或者软核实 ...

最新文章

  1. python split space
  2. 控制台输入与Math Random的基本使用
  3. chm转pdf_简历是以PDF还是Word格式提交的?
  4. java录入会员信息_java-第三章-升级我行我素购物管理系统,实现会员信息录入的功能...
  5. California Fault Lines: Understanding the Causes and Impact of Network Failures
  6. JAVA Cannot find class [×××] for bean with name ‘×ב defined in class path resource [×××] 问题解决方法
  7. java png生成webp图片_PNG转WEBP格式的动态图
  8. Windows核心编程_窗口蒙版效果
  9. 阶段5 3.微服务项目【学成在线】_day03 CMS页面管理开发_05-新增页面-服务端-接口测试...
  10. jvm参数-verbose:gc和-XX:+PrintGC有区别?
  11. 7 个有趣的 Python 实战项目,超级适合练手
  12. linux开发工具少_从设计到开发,我必不可少的10种工具
  13. #17-【二分】gdgzoi::比赛.Contest2281.Problem D (包裹快递)(zly#1)
  14. 互联网大佬纷纷搞养殖,这是为哪般~~~
  15. 用 Go 手写一个 JSON 序列化器
  16. html5 placeholder与value的区别
  17. 目标检测(十一)——DSSD
  18. 今日NFT/数字藏品热点
  19. java jdk 8学习笔记,Java JDK 8学习笔记 PDF_源雷技术空间
  20. 【重学计算机网络】DHCP IP的“孽缘“

热门文章

  1. 通信原理最佳接收-匹配滤波器
  2. 基于CWMP(TR069)协议ACS服务器的搭建
  3. 计算机毕业设计JAVA‘大学生心理健康咨询管理系统mybatis+源码+调试部署+系统+数据库+lw
  4. 每个Linux 用户都应该知道的Linux技巧
  5. java并发圣经,差距不止一星半点!Github星标85K的性能优化法则圣经
  6. android rtmp 播放器下载,android rtmp player 除了播放一般的视频格式 - 下载 - 搜珍网...
  7. html中支持的常用中文字体
  8. SAP GR/IR在系统AP中收货和校验对会计业务的影响(详细)
  9. 苹果越狱后怎么还原_iOS 13.3 越狱提升稳定性,自签又可以使用了
  10. TS入门——01.数据类型