From d9ea82c800d6852a9dbfba4b7c9d40acf2ad8903 Mon Sep 17 00:00:00 2001 From: xia-chu <771730766@qq.com> Date: Mon, 23 Oct 2023 20:39:10 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E6=9B=B4=E6=96=B0zltoolkit?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 3rdpart/ZLToolKit | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/3rdpart/ZLToolKit b/3rdpart/ZLToolKit index b11582c3..273592b6 160000 --- a/3rdpart/ZLToolKit +++ b/3rdpart/ZLToolKit @@ -1 +1 @@ -Subproject commit b11582c38e8dbbb8d93ca9ce33c9a0b0cd58f59a +Subproject commit 273592b6ba39babe6407021ffc089bfe7328e447 From 08d86c498ecb7cdcad9b540b9d4ac136376083a6 Mon Sep 17 00:00:00 2001 From: xia-chu <771730766@qq.com> Date: Mon, 23 Oct 2023 20:41:38 +0800 Subject: [PATCH 2/4] =?UTF-8?q?=E4=BF=AE=E5=A4=8Djemalloc=E7=BC=96?= =?UTF-8?q?=E8=AF=91=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Common/JemallocUtil.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Common/JemallocUtil.cpp b/src/Common/JemallocUtil.cpp index fa2de64a..d8b8414e 100644 --- a/src/Common/JemallocUtil.cpp +++ b/src/Common/JemallocUtil.cpp @@ -12,6 +12,7 @@ #include "JemallocUtil.h" #include "Util/logger.h" #ifdef USE_JEMALLOC +#include #include #include #endif From ebde21a314fc397e279e29c0a891f94ef545fcc5 Mon Sep 17 00:00:00 2001 From: xia-chu <771730766@qq.com> Date: Mon, 23 Oct 2023 20:45:58 +0800 Subject: [PATCH 3/4] =?UTF-8?q?=E4=BF=AE=E5=A4=8DopenRtpServer=E5=BC=80?= =?UTF-8?q?=E5=90=AFtcp=E6=A8=A1=E5=BC=8F=E5=90=8E=E6=89=93=E5=BC=80?= =?UTF-8?q?=E7=AB=AF=E5=8F=A3=E5=A4=B1=E8=B4=A5=E7=9A=84bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 两次监听同个tcp端口将导致打开tcp模式失败 --- src/Rtp/RtpServer.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Rtp/RtpServer.cpp b/src/Rtp/RtpServer.cpp index e40eeda7..1c6a8c1b 100644 --- a/src/Rtp/RtpServer.cpp +++ b/src/Rtp/RtpServer.cpp @@ -161,7 +161,7 @@ void RtpServer::start(uint16_t local_port, const string &stream_id, TcpMode tcp_ if (local_port == 0) { //随机端口,rtp端口采用偶数 auto pair = std::make_pair(rtp_socket, rtcp_socket); - makeSockPair(pair, local_ip, re_use_port, TcpMode::NONE == tcp_mode); + makeSockPair(pair, local_ip, re_use_port); local_port = rtp_socket->get_local_port(); } else if (!rtp_socket->bindUdpSock(local_port, local_ip, re_use_port)) { //用户指定端口 From a871fc1882a4db57ef3d9a0c7f963f255cdd6794 Mon Sep 17 00:00:00 2001 From: xia-chu <771730766@qq.com> Date: Mon, 23 Oct 2023 20:58:12 +0800 Subject: [PATCH 4/4] =?UTF-8?q?websocket=E6=9C=8D=E5=8A=A1=E5=99=A8?= =?UTF-8?q?=E6=94=AF=E6=8C=81=E5=9C=A8=E5=88=9B=E5=BB=BA=E5=99=A8=E4=B8=AD?= =?UTF-8?q?=E6=8C=87=E5=AE=9A=E6=B6=88=E6=81=AF=E7=B1=BB=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 通过该修改可以更灵活的指定同端口下不同websocket服务的消息类型 --- src/Http/WebSocketSession.h | 9 +++++---- tests/test_wsServer.cpp | 4 +++- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/src/Http/WebSocketSession.h b/src/Http/WebSocketSession.h index 96021c4d..8978330c 100644 --- a/src/Http/WebSocketSession.h +++ b/src/Http/WebSocketSession.h @@ -69,7 +69,7 @@ template class SessionCreator { public: //返回的Session必须派生于SendInterceptor,可以返回null - toolkit::Session::Ptr operator()(const mediakit::Parser &header, const mediakit::HttpSession &parent, const toolkit::Socket::Ptr &pSock){ + toolkit::Session::Ptr operator()(const mediakit::Parser &header, const mediakit::HttpSession &parent, const toolkit::Socket::Ptr &pSock, mediakit::WebSocketHeader::Type &data_type){ return std::make_shared >(header,parent,pSock); } }; @@ -128,7 +128,8 @@ protected: */ bool onWebSocketConnect(const mediakit::Parser &header) override{ //创建websocket session类 - _session = _creator(header, *this, HttpSessionType::getSock()); + auto data_type = DataType; + _session = _creator(header, *this, HttpSessionType::getSock(), data_type); if (!_session) { // 此url不允许创建websocket连接 return false; @@ -140,13 +141,13 @@ protected: //此处截取数据并进行websocket协议打包 std::weak_ptr weakSelf = std::static_pointer_cast(HttpSessionType::shared_from_this()); - std::dynamic_pointer_cast(_session)->setOnBeforeSendCB([weakSelf](const toolkit::Buffer::Ptr &buf) { + std::dynamic_pointer_cast(_session)->setOnBeforeSendCB([weakSelf, data_type](const toolkit::Buffer::Ptr &buf) { auto strongSelf = weakSelf.lock(); if (strongSelf) { mediakit::WebSocketHeader header; header._fin = true; header._reserved = 0; - header._opcode = DataType; + header._opcode = data_type; header._mask_flag = false; strongSelf->HttpSessionType::encode(header, buf); } diff --git a/tests/test_wsServer.cpp b/tests/test_wsServer.cpp index bd46787a..f839d352 100644 --- a/tests/test_wsServer.cpp +++ b/tests/test_wsServer.cpp @@ -81,9 +81,11 @@ public: */ struct EchoSessionCreator { //返回的Session必须派生于SendInterceptor,可以返回null(拒绝连接) - Session::Ptr operator()(const Parser &header, const HttpSession &parent, const Socket::Ptr &pSock) { + Session::Ptr operator()(const Parser &header, const HttpSession &parent, const Socket::Ptr &pSock, mediakit::WebSocketHeader::Type &type) { // return nullptr; if (header.url() == "/") { + // 可以指定传输方式 + // type = mediakit::WebSocketHeader::BINARY; return std::make_shared >(header, parent, pSock); } return std::make_shared >(header, parent, pSock);