跳到主要内容
版本:3.0

Websocket心跳设置

定义

命名空间:TouchSocket.Http.WebSockets
程序集:TouchSocket.Http.dll

一、说明

Websocket拥有自己的心跳数据格式,和响应心跳格式,专业名词是Ping和Pong。所以依靠这两个,可以直接实现心跳。

二、心跳配置

2.1 服务器配置

服务器在添加WebSocket功能时,可以直接启用自动回应Ping。

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();
提示

UseAutoPong非必须操作,如果不设置的话,自己在插件处理Ping报文也可以。

2.2 客户端使用心跳插件

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();

三、直接发送心跳

直接发送心跳,可以直接使用扩展方法。

client.Ping();
client.Pong();

或者自己构建数据帧

WSDataFrame dataFrame = new WSDataFrame()
{
FIN = true,
Opcode = WSDataType.Ping
};

//WSDataFrame dataFrame = new WSDataFrame()
//{
// FIN = true,
// Opcode = WSDataType.Pong
//};

client.SendAsync(dataFrame);
注意

自己构建数据帧,还应该设置Make等其他参数。

提示

无论是Ping,还是Pong,服务器和客户端都支持发送和接收。但是一般建议由客户端Ping,服务器只负责Pong即可。

本文示例Demo