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