--- id: createrpcserver sidebar_position: 1 title: 创建rpc服务 sidebar_label: a.创建rpc服务 --- ## 一、说明 RPC(Remote Procedure Call)远程过程调用协议,一种通过网络从远程计算机上请求服务,而不需要了解底层网络技术的协议。RPC它假定某些协议的存在,例如TPC/UDP等,为通信程序之间携带信息数据。在OSI网络七层模型中,RPC跨越了传输层和应用层,RPC使得开发,包括网络分布式多程序在内的应用程序更加容易。 过程是什么? 过程就是业务处理、计算任务,更直白的说,就是程序,就是想调用本地方法一样调用远程的过程。 TouchRpc支持服务器与客户端互相调用,也支持客户端之间相互调用。 ## 二、定义服务 1. 在**被调用**端中新建一个类名为**MyRpcServer**。 2. 继承于RpcServer类、或实现IRpcServer。亦或者将服务器声明为**瞬时生命**的服务,继承TransientRpcServer、或ITransientRpcServer。 3. 在该类中写**公共方法**,并用**TouchRpc**属性标签标记。 ```csharp public class MyRpcServer : RpcServer { [Description("登录")]//服务描述,在生成代理时,会变成注释。 [TouchRpc("Login")]//服务注册的函数键,此处为显式指定。默认不传参的时候,为该函数类全名+方法名的全小写。 public bool Login(string account,string password) { if (account=="123"&&password=="abc") { return true; } return false; } } ``` **瞬时生命**的服务,最大的特点就是,每个请求,都会创建一个新的服务类对象。然后可以通过**this.CallContext**直接访问当前的调用上下文。 ```csharp public class MyRpcServer : TransientRpcServer { [Description("登录")]//服务描述,在生成代理时,会变成注释。 [TouchRpc("Login")]//服务注册的函数键,此处为显式指定。默认不传参的时候,为该函数类全名+方法名的全小写。 public bool Login(string account,string password) { if (account=="123"&&password=="abc") { return true; } return false; } } ``` ## 三、启动rpc服务器 以下仅示例基于Tcp协议TouchRpc。其他协议的服务器请看[创建TouchRpc服务器](<..\7.2 创建TouchRpc服务器.md>) ```csharp var service =new TcpTouchRpcService(); TouchSocketConfig config= new TouchSocketConfig()//配置 .SetListenIPHosts(new IPHost[] { new IPHost(7789) }) .ConfigureRpcStore(a=> { a.RegisterServer();//注册服务 }) .SetVerifyToken("TouchRpc"); service.Setup(config) .Start(); service.Logger.Info($"{service.GetType().Name}已启动"); ``` ####