--- id: createtouchrpcservice sidebar_position: 2 title: 创建TouchRpc服务器 sidebar_label: 11.2 创建TouchRpc服务器 --- ## 一、说明 TouchRpc的服务器有多种形式的host,每种服务器的创建都大同小异,且功能基本一致。 ## 二、服务器架构 TouchRpc服务器的架构与其所属的基础协议架构一致,例如,在基于tcp协议时,其架构就和tcp服务器一致。 在收到**新客户端连接**时,会创建一个**TcpTouchRpcSocketClient**的类实例,与**客户端TcpTouchRpcClient**一一对应,后续的数据通信均由此实例负责。 ## 三、创建 #### 3.1 基于Tcp协议 这是基于Tcp协议TouchRpc。配置设置与[TcpService](<..\二、Tcp组件\2.2 创建TcpService.md>)一致。 ```csharp var service = new TcpTouchRpcService(); var config = new TouchSocketConfig()//配置 .SetListenIPHosts(new IPHost[] { new IPHost(7789) }) .ConfigureContainer(a => { a.AddConsoleLogger(); a.AddFileLogger(); }) .SetVerifyToken("TouchRpc");//设定连接口令,作用类似账号密码 service.Setup(config) .Start(); service.Logger.Info($"{service.GetType().Name}已启动"); ``` #### 3.2 基于Http协议 这是基于Http升级协议。在该解析器中,配置设置[HttpService](<..\五、HTTP组件\5.2 HttpService.md>)一致。 ```csharp var service = new HttpTouchRpcService(); TouchSocketConfig config = new TouchSocketConfig()//配置 .SetListenIPHosts(new IPHost[] { new IPHost(7789) }) .ConfigureContainer(a => { a.AddConsoleLogger(); a.AddFileLogger(); }) .SetVerifyToken("TouchRpc"); service.Setup(config) .Start(); service.Logger.Info($"{service.GetType().Name}已启动"); ``` #### 3.3 基于Udp协议 这是基于UDP协议解析器。在该解析器中,配置设置与[UdpSession](<..\三、Udp组件\3.2 UdpSession.md>)一致。因为udp是无连接的,所以不需要SetVerifyToken。 ```csharp var service = new UdpTouchRpc(); TouchSocketConfig config = new TouchSocketConfig()//配置 .SetBindIPHost(new IPHost(7789)) .ConfigureContainer(a => { a.AddConsoleLogger(); a.AddFileLogger(); }); service.Setup(config) .Start(); service.Logger.Info($"{service.GetType().Name}已启动"); ``` #### 3.4 基于AspNetCore的Websocket协议 具体步骤 1. nuget 安装`TouchSocket.AspNetCore`或者`TouchSocketPro.AspNetCore`。 2. IServiceCollection添加AddWSTouchRpc,并进行相关配置(不用配置端口,会和asp使用同一端口)。 3. IApplicationBuilder必须先使用UseWebSockets。 4. IApplicationBuilder调用UseWSTouchRpc,并传入url设置。 在ConfigureServices时,添加AddWSTouchRpc,并且配置相关项。 ```csharp public void ConfigureServices(IServiceCollection services) { //向Asp服务中添加IWSTouchRpcService services.AddWSTouchRpc(new TouchSocketConfig() .UseAspNetCoreContainer(services));//设置IOC容器 services.AddControllers(); services.AddSwaggerGen(c => { c.SwaggerDoc("v1", new OpenApiInfo { Title = "API Demo", Version = "v1" }); }); } ``` 启用中间件 首先必须启用WebSocket。其次使用UseWSTouchRpc即可。 ```csharp public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } // Swagger app.UseSwagger(); app.UseSwaggerUI(c => { c.SwaggerEndpoint("/swagger/v1/swagger.json", "API Demo v1"); }); app.UseWebSockets();//必须先使用WebSocket app.UseWSTouchRpc("/wstouchrpc");//该操作不会影响原有的WebSocket,只要url不同即可。 app.UseRouting(); app.UseAuthorization(); app.UseEndpoints(endpoints => { endpoints.MapControllers(); }); } ``` ##