Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
Z
ZLMediaKit
概览
Overview
Details
Activity
Cycle Analytics
版本库
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
问题
0
Issues
0
列表
Board
标记
里程碑
合并请求
0
Merge Requests
0
CI / CD
CI / CD
流水线
作业
日程表
图表
维基
Wiki
代码片段
Snippets
成员
Collapse sidebar
Close sidebar
活动
图像
聊天
创建新问题
作业
提交
Issue Boards
Open sidebar
张翔宇
ZLMediaKit
Commits
1bab0b8e
Commit
1bab0b8e
authored
2 years ago
by
xia-chu
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
修复WebSocket线程安全问题,同时新增内置客户端、服务端心跳机制。
parent
c2a8d46a
全部展开
显示空白字符变更
内嵌
并排
正在显示
2 个修改的文件
包含
24 行增加
和
13 行删除
+24
-13
src/Http/WebSocketClient.h
+0
-0
src/Http/WebSocketSession.h
+24
-13
没有找到文件。
src/Http/WebSocketClient.h
查看文件 @
1bab0b8e
差异被折叠。
点击展开。
src/Http/WebSocketSession.h
查看文件 @
1bab0b8e
...
...
@@ -36,7 +36,7 @@ public:
using
Ptr
=
std
::
shared_ptr
<
SessionTypeImp
>
;
SessionTypeImp
(
const
mediakit
::
Parser
&
header
,
const
mediakit
::
HttpSession
&
parent
,
const
toolkit
::
Socket
::
Ptr
&
pSock
)
:
SessionType
(
pSock
)
,
_identifier
(
parent
.
getIdentifier
())
{}
SessionType
(
pSock
)
{}
~
SessionTypeImp
()
=
default
;
...
...
@@ -61,12 +61,7 @@ protected:
return
SessionType
::
send
(
std
::
move
(
buf
));
}
std
::
string
getIdentifier
()
const
override
{
return
_identifier
;
}
private
:
std
::
string
_identifier
;
onBeforeSendCB
_beforeSendCB
;
};
...
...
@@ -98,11 +93,26 @@ public:
}
//每隔一段时间触发,用来做超时管理
void
onManager
()
override
{
if
(
_session
)
{
if
(
_session
)
{
_session
->
onManager
();
}
else
{
}
else
{
HttpSessionType
::
onManager
();
}
if
(
!
_session
)
{
// websocket尚未链接
return
;
}
if
(
_recv_ticker
.
elapsedTime
()
>
30
*
1000
)
{
HttpSessionType
::
shutdown
(
toolkit
::
SockException
(
toolkit
::
Err_timeout
,
"websocket timeout"
));
}
else
if
(
_recv_ticker
.
elapsedTime
()
>
10
*
1000
)
{
// 没收到回复,每10秒发送次ping 包
mediakit
::
WebSocketHeader
header
;
header
.
_fin
=
true
;
header
.
_reserved
=
0
;
header
.
_opcode
=
mediakit
::
WebSocketHeader
::
PING
;
header
.
_mask_flag
=
false
;
HttpSessionType
::
encode
(
header
,
nullptr
);
}
}
void
attachServer
(
const
toolkit
::
Server
&
server
)
override
{
...
...
@@ -118,13 +128,13 @@ protected:
*/
bool
onWebSocketConnect
(
const
mediakit
::
Parser
&
header
)
override
{
//创建websocket session类
_session
=
_creator
(
header
,
*
this
,
HttpSessionType
::
getSock
());
if
(
!
_session
)
{
//此url不允许创建websocket连接
_session
=
_creator
(
header
,
*
this
,
HttpSessionType
::
getSock
());
if
(
!
_session
)
{
//
此url不允许创建websocket连接
return
false
;
}
auto
strongServer
=
_weak_server
.
lock
();
if
(
strongServer
)
{
if
(
strongServer
)
{
_session
->
attachServer
(
*
strongServer
);
}
...
...
@@ -170,7 +180,7 @@ protected:
auto
header
=
const_cast
<
mediakit
::
WebSocketHeader
&>
(
header_in
);
auto
flag
=
header
.
_mask_flag
;
header
.
_mask_flag
=
false
;
_recv_ticker
.
resetTime
();
switch
(
header
.
_opcode
){
case
mediakit
:
:
WebSocketHeader
::
CLOSE
:
{
HttpSessionType
::
encode
(
header
,
nullptr
);
...
...
@@ -230,6 +240,7 @@ private:
std
::
weak_ptr
<
toolkit
::
Server
>
_weak_server
;
toolkit
::
Session
::
Ptr
_session
;
Creator
_creator
;
toolkit
::
Ticker
_recv_ticker
;
};
...
...
This diff is collapsed.
Click to expand it.
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论