mirror of
https://github.com/RRQM/TouchSocket.git
synced 2025-12-19 18:06:45 +08:00
101 lines
2.3 KiB
Plaintext
101 lines
2.3 KiB
Plaintext
---
|
||
id: websocketheartbeat
|
||
title: Websocket心跳设置
|
||
---
|
||
|
||
### 定义
|
||
|
||
命名空间:TouchSocket.Http.WebSockets <br/>
|
||
程序集:[TouchSocket.Http.dll](https://www.nuget.org/packages/TouchSocket.Http)
|
||
|
||
## 一、说明
|
||
|
||
Websocket拥有自己的心跳数据格式,和响应心跳格式,专业名词是Ping和Pong。所以依靠这两个,可以直接实现心跳。
|
||
|
||
## 二、心跳配置
|
||
|
||
#### 2.1 服务器配置
|
||
|
||
服务器在添加WebSocket功能时,可以直接启用自动回应Ping。
|
||
|
||
```csharp {12}
|
||
var service = new HttpService();
|
||
await service.SetupAsync(new TouchSocketConfig()//加载配置
|
||
.SetListenIPHosts(7789)
|
||
.ConfigureContainer(a =>
|
||
{
|
||
a.AddConsoleLogger();
|
||
})
|
||
.ConfigurePlugins(a =>
|
||
{
|
||
a.UseWebSocket()//添加WebSocket功能
|
||
.SetWSUrl("/ws")
|
||
.UseAutoPong();//当收到ping报文时自动回应pong
|
||
}));
|
||
|
||
await service.StartAsync();
|
||
```
|
||
|
||
:::tip 提示
|
||
|
||
**UseAutoPong**非必须操作,如果不设置的话,自己在插件处理Ping报文也可以。
|
||
|
||
:::
|
||
|
||
#### 2.2 客户端使用心跳插件
|
||
|
||
```csharp {10-11}
|
||
var client = new WebSocketClient();
|
||
await client.SetupAsync(new TouchSocketConfig()
|
||
.SetRemoteIPHost("ws://127.0.0.1:7789/ws")
|
||
.ConfigureContainer(a =>
|
||
{
|
||
a.AddFileLogger();
|
||
})
|
||
.ConfigurePlugins(a =>
|
||
{
|
||
a.UseWebSocketHeartbeat()//使用心跳插件
|
||
.SetTick(TimeSpan.FromSeconds(1));//每5秒ping一次。
|
||
}));
|
||
await client.ConnectAsync();
|
||
```
|
||
|
||
## 三、直接发送心跳
|
||
|
||
直接发送心跳,可以直接使用扩展方法。
|
||
```csharp showLineNumbers
|
||
await client.PingAsync();
|
||
await client.PongAsync();
|
||
```
|
||
|
||
或者自己构建数据帧
|
||
```csharp showLineNumbers
|
||
WSDataFrame dataFrame = new WSDataFrame()
|
||
{
|
||
FIN = true,
|
||
Opcode = WSDataType.Ping
|
||
};
|
||
|
||
//WSDataFrame dataFrame = new WSDataFrame()
|
||
//{
|
||
// FIN = true,
|
||
// Opcode = WSDataType.Pong
|
||
//};
|
||
|
||
client.SendAsync(dataFrame);
|
||
```
|
||
|
||
:::caution 注意
|
||
|
||
自己构建数据帧,还应该设置Make等其他参数。
|
||
|
||
:::
|
||
|
||
:::tip 提示
|
||
|
||
无论是Ping,还是Pong,服务器和客户端都支持发送和接收。但是一般建议由客户端Ping,服务器只负责Pong即可。
|
||
|
||
:::
|
||
|
||
[本文示例Demo](https://gitee.com/RRQM_Home/TouchSocket/tree/master/examples/WebSocket/WebSocketConsoleApp)
|