日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

高性能 TCP UDP 通信框架 HP-Socket v3.2.3

發布時間:2023/12/15 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 高性能 TCP UDP 通信框架 HP-Socket v3.2.3 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

  HP-Socket 是一套通用的高性能 TCP/UDP 通信框架,包含服務端組件、客戶端組件和 Agent 組件,廣泛適用于各種不同應用場景的 TCP/UDP 通信系統,提供 C/C++、C#、Delphi、E(易語言)、Java、Python 等編程語言接口。HP-Socket 對通信層實現完全封裝,應用程序不必關注通信層的任何細節;HP-Socket 提供基于事件通知模型的 API 接口,能非常簡單高效地整合到新舊應用程序中。

  為了讓使用者能方便快速地學習和使用 HP-Socket,迅速掌握框架的設計思想和使用方法,特此精心制作了大量 Demo 示例(如:PUSH 模型示例、PULL 模型示例、性能測試示例以及其它編程語言示例)。HP-Socket 目前運行在 Windows 平臺,將來會實現跨平臺支持。

----------------------------------------------------------------

通用性

  • HP-Socket 的唯一職責就是接收和發送字節流,不參與應用程序的協議解析等工作。
  • HP-Socket 與應用程序通過接口進行交互,并完全解耦。任何應用只要實現了 HP-Socket 的接口規范都可以無縫整合 HP-Socket。

易用性

  易用性對所有通用框架都是至關重要的,如果太難用還不如自己重頭寫一個來得方便。因此,HP-Socket 的接口設計得非常簡單和統一。

  HP-Socket 完全封裝了所有底層通信細節,應用程序不必也不能干預底層通信操作。通信連接被抽象為 Connection ID,Connection ID 作為連接的唯一標識提供給應用程序來處理不同的連接。

高性能

  HP-Socket 作為底層的通用框架,性能是關鍵指標,絕對不能成為系統的瓶頸。HP-Socket 在設計上充分考慮性能、使用場景、復雜性和易用性等因素,作出以下幾點設計決策:

  • Client 組件:基于 Event Select 通信模型,在單獨線程中執行通信操作,避免與主線程或其他線程相互干擾。每個組件對象管理一個 Socket 連接。
  • Server 組件:基于 IOCP 通信模型,并結合緩存池、私有堆(Private Heap)等技術,支持超大規模連接,在高并發場景下實現高效內存管理。
  • Agent 組件:對于代理服務器或中轉服務器等應用場景,服務器自身也作為客戶端向其它服務器發起大規模連接,一個 Agent 組件對象同時可管理多個 Socket 連接;Agent 組件與 Server 組件采用相同的技術架構,可以用作代理服務器或中轉服務器的客戶端部件。

伸縮性

  應用程序能夠根據不同的容量要求、通信規模和資源狀況等現實場景調整 HP-Socket 的各項性能參數(如:工作線程的數量、緩存池的大小、發送模式和接收模式等),優化資源配置,在滿足應用需求的同時不必過度浪費資源。

   (項目主頁:點擊這里,下載地址:點擊這里)


*** v3.2.3更新 ***

?>?common-src 優化:

-----------------
  • 優化通信組件的同步機制
  • 整體性能提升約 10%
  • >?升級說明:

    -----------------
  • 使用 HP-Socket v3.2.2 及以前版本的應用程序可以安全升級到 HP-Socket v3.2.3

  • *** v3.2.2 更新 ***

    ?>?增加若干幫助方法:

    -----------------
  • 批量發送方法 SendPackets() 1) IClient/IServer/IAgent 增加方法 SendPackets(dwConnID, pBuffers[], iBufferCount) 2) 對于 TCP 組件 - 順序發送所有數據包 3) 對于 UDP 組件 - 把所有數據包組合成一個數據包發送(總長度不能大于 UDP 包最大長度)
  • 小文件發送方法 SendSmallFile() 1) ITcpClient/ITcpServer/ITcpAgent 增加方法 SendSmallFile(lpszFileName, pHead, pTail) 2) 通過 pHead 和 pTail 參數,可以分別在文件數據的頭部和尾部加入自定義數據 3) SendSmallFile() 只能發送 4096 KB 以內大小的文件
  • HPSocket.dll 和 HPSocket4C.dll 增加以下導出方法 1) SYS_WSAGetLastError():調用系統的 WSAGetLastError() 2) SYS_SetSocketOption():調用系統的 setsockopt() 3) SYS_GetSocketOption():調用系統的 getsockopt() 4) SYS_IoctlSocket() :調用系統的 ioctlsocket() 5) SYS_WSAIoctl() :調用系統的 WSAIoctl()
  • >?升級說明:

    -----------------
  • 使用 HP-Socket v3.2.1 及以前版本的應用程序可以安全升級到 HP-Socket v3.2.2

  • *** v3.2.1 更新 ***

    ?>?增加 TcpAgent / TcpPullAgent 通信組件:

    -----------------
  • 對于代理服務器或中轉服務器等應用場景,服務器自身也作為客戶端向其它服務器發起大規模連接
  • TcpClient / TcpPullClient 基于 Event Select 通信模型,每個組件對象管理一個 Socket,并開啟一個線程,不適合上述應用場景
  • TcpAgent / TcpPullAgent 基于 IOCP 通信模型,一個組件對象管理多個 Socket,適合用作代理服務器或中轉服務器的客戶端通信組件
  • TcpAgent / TcpPullAgent 的使用方式依然簡單,提供以下接口方法: /* 1) 通知接口方法 */ OnPrepareConnect(CONNID dwConnID, SOCKET socket) OnConnect(CONNID dwConnID) OnSend(CONNID dwConnID, const BYTE* pData, int iLength) OnReceive(CONNID dwConnID, const BYTE* pData, int iLength) //(Push 模型) OnReceive(CONNID dwConnID, int iLength) //(Pull 模型) OnClose(CONNID dwConnID) OnError(CONNID dwConnID, EnSocketOperation enOperation, int iErrorCode) OnAgentShutdown()/* 2) 主要操作方法 */ Start(LPCTSTR pszBindAddress = nullptr, BOOL bAsyncConnect = TRUE) Stop() Connect(LPCTSTR pszRemoteAddress, USHORT usPort, CONNID* pdwConnID = nullptr) Send(CONNID dwConnID, const BYTE* pBuffer, int iLength) Disconnect(CONNID dwConnID, BOOL bForce = TRUE) Fetch(CONNID dwConnID, BYTE* pData, int iLength) //(Pull 模型)
  • 增加 TcpAgent / TcpPullAgent 使用示例:Agent-PFM / Agent-Pull / Agent-4C

  • 增加 TcpAgent + TcpServer 實現的 HTTP 代理服務器示例:HttpProxy

  • >?增加 HPSocket for Java SDK:

    -----------------
  • 提供 Java 開發包:hpsocket-3.2.1.jar(通過 JNA 實現,目前只支持 Windows 平臺)
  • 運行環境:JDK 1.6+,JVM 運行在 server 模式("java -server",在 client 模式下性能受影響)
  • MBCS 和 Unicode 版本分布位于包 org.jessma.hpsocket.mbcs 和 org.jessma.hpsocket.unicode
  • HPSocket for Java SDK 提供以下通信組件: 1) TcpServer:TCP 通信服務端組件,支持 PUSH/PULL 模型 2) TcpClient:TCP 通信客戶端組件,支持 PUSH/PULL 模型 3) TcpAgent :TCP 通信 Agent 組件,支持 PUSH/PULL 模型 4) UdpServer:UDP 通信服務端組件,支持 PUSH 模型 5) UdpClient:UDP 通信客戶端組件,支持 PUSH 模型
  • HPSocket4J 的使用方法(以 TcpAgent 為例): /* 0: 應用程序加入 hpsocket-3.2.1.jar 和 jna-4.1.0.jar *//* 1: 創建通信組件對象 */ TcpAgent agent = TcpAgent.create(Mode.PUSH);/* 2: 設置回調函數對象 */ // (可選) agent.setCallBackOnPrepareConnect(new OnPrepareConnectImpl()); // (可選) agent.setCallBackOnConnect(new OnConnectImpl()); // (必須)PUSH 模型需要設置 OnReceive 回調函數對象 agent.setCallBackOnReceive(new OnReceiveImpl()); // (必須)PULL 模型需要設置 OnPullReceive 回調函數對象 // agent.setCallBackOnPullReceive(new OnPullReceiveImpl()); // (可選) agent.setCallBackOnSend(new OnSendImpl()); // (必須) agent.setCallBackOnClose(new OnCloseImpl()); // (必須) agent.setCallBackOnError(new OnErrorImpl()); // (可選) agent.setCallBackOnAgentShutdown(new OnAgentShutdownImpl());/* 3:啟動通信組件 */ agent.start("127.0.0.1", false);/* 4:連接服務器 */ agent.connect("localhost", (short)5555, pdwConnID);/* 5:處理通信數據 */ // 響應 OnReceive / OnPullReceive 事件接收數據 // 使用 agent.send(dwConnID, data, data.length) 發送數據/* 6:關閉通信組件 */ agent.stop();/* 7:銷毀通信組件 */ TcpAgent.destroy(agent);
  • 增加示例工程 TestEcho-4J,展示 HPSocket4J 的使用方法(包括 PULL 模型示例和性能測試示例)

  • >?優化數據收發策略:

    -----------------
  • Server 和 Agent 組件提供以下三種數據發送策略 1)PACK - 打包模式(默認):盡量把多個發送操作的數據組合在一起,增加傳輸效率 2)SAFE - 安全模式 :盡量把多個發送操作的數據組合在一起,控制傳輸速度,避免緩沖區溢出 3)DIRECT - 直接模式 :對每一個發送操作都直接投遞,適用于負載不高但要求實時性較高的場合
  • Server 和 Agent 組件提供以下兩種數據接收策略 1)SERIAL - 串行模式(默認):順序觸發同一連接的 OnReceive 和 OnClose/OnError 事件 2)PARALLEL - 并行模式:在不同的通信線程中同時觸發同一連接的 OnReceive 和 OnClose/OnError 事件

  • *** v3.1.3 更新 ***

    ?>?增加其它語言 Demo:

    -----------------
  • C#
  • Delphi
  • E 語言
  • > Bug Fix:

    -----------------
  • 修復 IP 地址判斷錯誤 Bug
    ? 1) 客戶端連接服務器時,如果服務器 IP 地址滿位(12個數字:‘AAA.BBB.CCC.DDD’),IP 地址解析錯誤 2) 影響組件:所有 TCP/UDP 客戶端組件 3) 影響版本:v3.1.2 及之前所有版本 ?
  • 修復域名或主機名的 IP 地址解析錯誤 Bug
    ? 1) 客戶端組件通過域名或主機名連接服務器時,可能會解析到錯誤的 IP 地址 2) 影響組件:所有 TCP/UDP 客戶端組件 3) 影響版本:v3.1.2 及之前所有版本

  • *** v3.1.2 更新 ***

    ?> 修改 Server 組件的 OnClose() / OnError() 事件的觸發規則:

    -----------------
  • 以前版本的 TCP/UDP Server 組件中,當關閉一個連接時可能會同時觸發一個 OnClose() 事件和若干個 OnError() 事件
  • 由于存在上述可能性,所以應用程序需要對 OnClose() / OnError() 的處理事件代碼段進行同步
  • 從 v3.1.2 開始,當多個 OnClose() / OnError() 事件同時發生時,組件只會向應用程序通知第一個事件,后續事件則忽略
  • 因此,應用程序在處理 OnClose() / OnError() 事件時不必處理同步,減少了出錯的可能和編寫同步及檢測代碼的負擔
  • 示例代碼

    /* 示例代碼一:*/ /*----------------------------------------------------------------------------*/ ISocketListener::EnHandleResult CServerDlg::OnClose(CONNID dwConnID) {// 以前版本:有可能存在并發的 OnClose()/OnError(),要把代碼放在臨界區中并檢測返回值CCriSecLock locallock(m_csPkgInfo); // <-- 臨界區PVOID pInfo = nullptr;// <-- 檢測返回值if(m_Server->GetConnectionExtra(dwConnID, &pInfo) && pInfo != nullptr){m_Server->SetConnectionExtra(dwConnID, nullptr);delete pInfo;} }/* 示例代碼二:*/ /*----------------------------------------------------------------------------*/ ISocketListener::EnHandleResult CServerDlg::OnClose(CONNID dwConnID) {// v3.1.2 版本:只會接收到一個 OnClose()/OnError() 事件,能安全地移除臨界區代碼和檢測代碼PVOID pInfo = nullptr;m_Server->GetConnectionExtra(dwConnID, &pInfo);ASSERT(pInfo != nullptr);delete pInfo; }

  • *** v3.1.1 更新 ***

    ?> 增加導出純 C 函數的動態鏈接庫 HPSocket4C.dll:

    -----------------
  • 增加代碼文件 HPSocket4C.h 和 HPSocket4C.cpp,用于創建 HPSocket4C.dll
  • 導出純 C 函數,讓其它語言(如:C/C#/Delphi 等)能方便地使用 HPSocket
  • HPSocket4C.dll 使用方法 方法一: ------------------------------------------------------------------------------ (0) (C/C++ 程序)包含 HPSocket4C.h 頭文件 (1) 調用 ::Create_HP_XxxListener() 函數創建監聽器對象 (2) 調用 ::Create_HP_Xxx(pListener) 函數創建 HPSocket 對象 (3) 調用 ::HP_Set_FN_Xxx_OnYyy(pListener, ...) 函數設置監聽器的回調函數 (4) 調用相關導出函數操作 HPSocket 對象 (5) ...... ...... (6) 調用 ::Destroy_HP_Xxx(pSocket) 函數銷毀 HPSocket 對象 (7) 調用 ::Destroy_HP_XxxListener(pListener) 函數銷毀監聽器對象方法二: ------------------------------------------------------------------------------ (1) 應用程序把需要用到的導出函數封裝到特定語言的包裝類中 (2) 通過包裝類封裝后,以面向對象的方式使用 HPSocket
  • 動態鏈接庫發行版本 (1) x86/HPSocket4C.dll - (32位/MBCS/Release) (2) x86/HPSocket4C_D.dll - (32位/MBCS/DeBug) (3) x86/HPSocket4C_U.dll - (32位/UNICODE/Release) (4) x86/HPSocket4C_UD.dll - (32位/UNICODE/DeBug) (5) x64/HPSocket4C.dll - (64位/MBCS/Release) (6) x64/HPSocket4C_D.dll - (64位/MBCS/DeBug) (7) x64/HPSocket4C_U.dll - (64位/UNICODE/Release) (8) x64/HPSocket4C_UD.dll - (64位/UNICODE/DeBug)
  • > 全面啟用 Buffer Pool 緩存機制:

    -----------------
  • Common/Src 增加代碼文件 bufferpool.h 和 bufferpool.cpp,實現 Buffer Pool 緩存機制
  • 通過 Buffer Pool 緩存機制提升內存使用效率,減少動態內存分配和釋放操作,避免內存空洞
  • ICTcpClient 用 CItemPool 和 TItemList 實現發送緩沖區
  • CUdpClient 用 CItemPool 和 TItemList 實現發送緩沖區
  • CTcpPullClient 用 CItemPool 和 TItemList 實現發送緩沖區和 PULL 緩沖區
  • CTcpPullServer 用 CBufferPool 和 TBuffer 實現 PULL 緩沖區

  • *** v3.0.2 更新 ***

    ?> 把 HP-Socket 編譯為動態鏈接庫:

    -----------------

  • 應用程序可以通過導入源代碼或動態鏈接庫方式使用 HP-Socket
  • 動態鏈接庫使用方法 方法一: ------------------------------------------------------------------------------ (0) 應用程序包含 SocketInterface.h 和 HPSocket.h 頭文件 (1) 調用 HP_Create_Xxx() 函數創建 HPSocket 對象 (2) 使用完畢后調用 HP_Destroy_Xxx() 函數銷毀 HPSocket 對象方法二: ------------------------------------------------------------------------------ (0) 應用程序包含 SocketInterface.h 和 HPSocket.h 頭文件 (1) 創建 CXxxWrapper 包裝器,通過包裝器智能指針使用 HPSocket 對象
  • 動態鏈接庫發行版本 (1) x86/HPSocket.dll - (32位/MBCS/Release) (2) x86/HPSocket_D.dll - (32位/MBCS/DeBug) (3) x86/HPSocket_U.dll - (32位/UNICODE/Release) (4) x86/HPSocket_UD.dll - (32位/UNICODE/DeBug) (5) x64/HPSocket.dll - (64位/MBCS/Release) (6) x64/HPSocket_D.dll - (64位/MBCS/DeBug) (7) x64/HPSocket_U.dll - (64位/UNICODE/Release) (8) x64/HPSocket_UD.dll - (64位/UNICODE/DeBug)

  • *** v3.0.1 更新 ***

    ?> 新增 UDP 通信組件:

    -----------------

  • 新增兩個 UDP 通信組件:CUdpServer 為服務端組件,CUdpClient 為客戶端組件
  • 服務端組件 CUdpServer 采用 IOCP 通信模型
  • 客戶端組件 CUdpClient 采用 Event Select 通信模型
  • UDP 通信組件的接口與原 TCP 通信組件一致,簡單實用
  • UDP 通信組件內置通信線路自動監測機制
  • 新增 UDP 通信組件示例工程 TestEcho-UDP
  • > 代碼重構與優化:

    -----------------

  • 規范所有接口、類以及代碼文件的命名
  • 重構和優化了大量組件代碼
  • 服務端組件加入讀寫鎖機制,有效平衡處理性能與安全性
  • 服務端組件的 Socket 對象緩存列表設置了鎖定時間,提高訪問的安全性

  • 轉載于:https://www.cnblogs.com/ldcsaa/p/3909980.html

    總結

    以上是生活随笔為你收集整理的高性能 TCP UDP 通信框架 HP-Socket v3.2.3的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。