---
id: createtouchrpcservice
sidebar_position: 2
title: 创建TouchRpc服务器
sidebar_label: 11.2 创建TouchRpc服务器
---


## 一、说明

TouchRpc的服务器有多种形式的host，每种服务器的创建都大同小异，且功能基本一致。


## 二、服务器架构

TouchRpc服务器的架构与其所属的基础协议架构一致，例如，在基于tcp协议时，其架构就和tcp服务器一致。
在收到**新客户端连接**时，会创建一个**TcpTouchRpcSocketClient**的类实例，与**客户端TcpTouchRpcClient**一一对应，后续的数据通信均由此实例负责。


## 三、创建

<a name="JgmHn"></a>

#### 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}已启动");
```

<a name="wuiMD"></a>

#### 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}已启动");
```

<a name="IAQ9G"></a>

#### 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}已启动");
```

<a name="vW1M2"></a>

#### 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();
     });
 }
```


##
