Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
若汝棋茗
RRQMSocket
提交
288a9915
RRQMSocket
项目概览
若汝棋茗
/
RRQMSocket
10 个月 前同步成功
通知
20
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
RRQMSocket
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
288a9915
编写于
2月 24, 2023
作者:
若
若汝棋茗
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
修复更新websocket相关
上级
305d1e5b
变更
6
隐藏空白更改
内联
并排
Showing
6 changed file
with
55 addition
and
21 deletion
+55
-21
src/TouchSocket/Http/WebSockets/Extensions/WSClientExtensions.cs
...chSocket/Http/WebSockets/Extensions/WSClientExtensions.cs
+7
-7
src/TouchSocket/Http/WebSockets/Extensions/WebSocketPluginsManagerExtension.cs
...WebSockets/Extensions/WebSocketPluginsManagerExtension.cs
+9
-0
src/TouchSocket/Http/WebSockets/Extensions/WebSocketServerExtensions.cs
...t/Http/WebSockets/Extensions/WebSocketServerExtensions.cs
+0
-2
src/TouchSocket/Http/WebSockets/Plugins/WebSocketHeartbeatPlugin.cs
...ocket/Http/WebSockets/Plugins/WebSocketHeartbeatPlugin.cs
+17
-9
src/TouchSocket/Http/WebSockets/Plugins/WebSocketServerPlugin.cs
...chSocket/Http/WebSockets/Plugins/WebSocketServerPlugin.cs
+21
-2
src/TouchSocket/TouchSocket.csproj
src/TouchSocket/TouchSocket.csproj
+1
-1
未找到文件。
src/TouchSocket/Http/WebSockets/Extensions/WSClientExtensions.cs
浏览文件 @
288a9915
...
...
@@ -57,7 +57,7 @@ namespace TouchSocket.Http.WebSockets
/// </summary>
/// <param name="client"></param>
/// <returns></returns>
public
static
bool
Ping
(
this
HttpClientBase
client
)
public
static
bool
Ping
WS
(
this
HttpClientBase
client
)
{
try
{
...
...
@@ -75,7 +75,7 @@ namespace TouchSocket.Http.WebSockets
/// </summary>
/// <param name="client"></param>
/// <returns></returns>
public
static
bool
Pong
(
this
HttpClientBase
client
)
public
static
bool
Pong
WS
(
this
HttpClientBase
client
)
{
try
{
...
...
@@ -434,11 +434,11 @@ namespace TouchSocket.Http.WebSockets
#
region
服务器
/// <summary>
/// 发送Ping报文。
/// 发送
WebSocket协议的
Ping报文。
/// </summary>
/// <param name="client"></param>
/// <returns></returns>
public
static
bool
Ping
(
this
HttpSocketClient
client
)
public
static
bool
Ping
WS
(
this
HttpSocketClient
client
)
{
try
{
...
...
@@ -452,11 +452,11 @@ namespace TouchSocket.Http.WebSockets
}
/// <summary>
/// 发送Pong报文。
/// 发送
WebSocket协议的
Pong报文。
/// </summary>
/// <param name="client"></param>
/// <returns></returns>
public
static
bool
Pong
(
this
HttpSocketClient
client
)
public
static
bool
Pong
WS
(
this
HttpSocketClient
client
)
{
try
{
...
...
@@ -470,7 +470,7 @@ namespace TouchSocket.Http.WebSockets
}
/// <summary>
/// 发送Close报文。
/// 发送
WebSocket协议的
Close报文。
/// </summary>
/// <param name="client"></param>
/// <param name="msg"></param>
...
...
src/TouchSocket/Http/WebSockets/Extensions/WebSocketPluginsManagerExtension.cs
浏览文件 @
288a9915
...
...
@@ -27,5 +27,14 @@ namespace TouchSocket.Core
{
return
pluginsManager
.
Add
<
WebSocketServerPlugin
>();
}
/// <summary>
/// 使用WebSocket心跳插件(仅客户端生效)
/// </summary>
/// <returns>插件类型实例</returns>
public
static
WebSocketHeartbeatPlugin
UseHeartbeat
(
this
IPluginsManager
pluginsManager
)
{
return
pluginsManager
.
Add
<
WebSocketHeartbeatPlugin
>();
}
}
}
\ No newline at end of file
src/TouchSocket/Http/WebSockets/Extensions/WebSocketServerExtensions.cs
浏览文件 @
288a9915
...
...
@@ -41,12 +41,10 @@ namespace TouchSocket.Http.WebSockets
IsPermitOperation
=
true
};
client
.
PluginsManager
?.
Raise
<
IWebSocketPlugin
>(
nameof
(
IWebSocketPlugin
.
OnHandshaking
),
client
,
args
);
if
(
args
.
Context
.
Response
.
Responsed
)
{
return
false
;
}
if
(
args
.
IsPermitOperation
)
{
client
.
SetDataHandlingAdapter
(
new
WebSocketDataHandlingAdapter
());
...
...
src/TouchSocket/Http/WebSockets/Plugins/WebSocketHeartbeatPlugin.cs
浏览文件 @
288a9915
...
...
@@ -10,6 +10,7 @@
// 感谢您的下载和使用
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
using
System
;
using
System.Threading
;
using
TouchSocket.Core
;
using
TouchSocket.Sockets
;
...
...
@@ -22,16 +23,23 @@ namespace TouchSocket.Http.WebSockets
[
SingletonPlugin
]
public
class
WebSocketHeartbeatPlugin
:
WebSocketPluginBase
{
private
readonly
int
m_timeTick
;
private
TimeSpan
m_timeTick
=
TimeSpan
.
FromSeconds
(
5
)
;
/// <summary>
/// 初始化一个适用于WebSocket的心跳插件
/// </summary>
/// <param name="interval"></param>
[
DependencyInject
(
1000
*
5
)]
public
WebSocketHeartbeatPlugin
(
int
interval
)
public
WebSocketHeartbeatPlugin
()
{
m_timeTick
=
interval
;
}
/// <summary>
/// 设置心跳间隔,默认5秒。
/// </summary>
/// <param name="timeSpan"></param>
public
void
Tick
(
TimeSpan
timeSpan
)
{
this
.
m_timeTick
=
timeSpan
;
}
/// <summary>
...
...
@@ -49,8 +57,8 @@ namespace TouchSocket.Http.WebSockets
}
client
.
SetValue
(
WebSocketExtensions
.
HeartbeatTimerProperty
,
new
Timer
((
o
)
=>
{
httpClientBase
.
Ping
();
},
null
,
0
,
m_timeTick
));
httpClientBase
.
Ping
WS
();
},
null
,
m_timeTick
,
m_timeTick
));
}
base
.
OnHandshaked
(
client
,
e
);
}
...
...
@@ -63,9 +71,9 @@ namespace TouchSocket.Http.WebSockets
protected
override
void
OnDisconnected
(
ITcpClientBase
client
,
DisconnectEventArgs
e
)
{
base
.
OnDisconnected
(
client
,
e
);
if
(
client
.
GetValue
<
Timer
>
(
WebSocketExtensions
.
HeartbeatTimerProperty
)
is
Timer
timer
)
if
(
client
.
GetValue
(
WebSocketExtensions
.
HeartbeatTimerProperty
)
is
Timer
timer
)
{
timer
.
Dispose
();
timer
.
Safe
Dispose
();
client
.
SetValue
(
WebSocketExtensions
.
HeartbeatTimerProperty
,
null
);
}
}
...
...
src/TouchSocket/Http/WebSockets/Plugins/WebSocketServerPlugin.cs
浏览文件 @
288a9915
...
...
@@ -53,6 +53,11 @@ namespace TouchSocket.Http.WebSockets
/// </summary>
public
bool
AutoClose
{
get
;
set
;
}
=
true
;
/// <summary>
/// 当收到ping报文时,是否自动回应pong。
/// </summary>
public
bool
AutoPong
{
get
;
set
;
}
=
true
;
/// <summary>
/// 处理WS数据的回调
/// </summary>
...
...
@@ -78,6 +83,16 @@ namespace TouchSocket.Http.WebSockets
return
this
;
}
/// <summary>
/// 当收到ping报文时,不自动回应pong。
/// </summary>
/// <returns></returns>
public
WebSocketServerPlugin
NoAutoPong
()
{
AutoPong
=
false
;
return
this
;
}
/// <summary>
/// 设置处理WS数据的回调。
/// </summary>
...
...
@@ -128,14 +143,18 @@ namespace TouchSocket.Http.WebSockets
/// <param name="e"></param>
protected
virtual
void
OnHandleWSDataFrame
(
ITcpClientBase
client
,
WSDataFrameEventArgs
e
)
{
if
(
e
.
DataFrame
.
Opcode
==
WSDataType
.
Close
&&
Auto
Close
)
if
(
AutoClose
&&
e
.
DataFrame
.
Opcode
==
WSDataType
.
Close
)
{
string
msg
=
e
.
DataFrame
.
PayloadData
?.
ToString
();
m_pluginsManager
.
Raise
<
IWebSocketPlugin
>(
nameof
(
IWebSocketPlugin
.
OnClosing
),
client
,
new
MsgEventArgs
()
{
Message
=
msg
});
client
.
Close
(
msg
);
return
;
}
if
(
AutoPong
&&
e
.
DataFrame
.
Opcode
==
WSDataType
.
Ping
)
{
((
HttpSocketClient
)
client
).
PongWS
();
return
;
}
if
(
m_pluginsManager
.
Raise
<
IWebSocketPlugin
>(
nameof
(
IWebSocketPlugin
.
OnHandleWSDataFrame
),
client
,
e
))
{
return
;
...
...
src/TouchSocket/TouchSocket.csproj
浏览文件 @
288a9915
...
...
@@ -4,7 +4,7 @@
<ApplicationIcon>logo.ico</ApplicationIcon>
<SignAssembly>True</SignAssembly>
<AssemblyOriginatorKeyFile>D:\MyStore\13_Doc\Keys\TouchSocket.snk</AssemblyOriginatorKeyFile>
<Version>1.2.1
4
</Version>
<Version>1.2.1
5
</Version>
<LangVersion>8.0</LangVersion>
<Company>若汝棋茗</Company>
<Copyright>Copyright © 2023 若汝棋茗</Copyright>
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录