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即可。