<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          HP-Socket高性能網(wǎng)絡(luò)通信框架

          聯(lián)合創(chuàng)作 · 2023-09-29 09:30

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

          為了讓使用者能方便快速地學(xué)習(xí)和使用 HP-Socket ,迅速掌握框架的設(shè)計(jì)思想和使用方法,特此精心制作了大量 Demo 示例(如:PUSH 模型示例、PULL 模型示例、PACK 模型示例、性能測(cè)試示例以及其它編程語(yǔ)言示例)。HP-Socket 目前支持 Windows 和 Linux 平臺(tái)。

          HP-Socket 的設(shè)計(jì)充分注重功能、通用型、易用性與伸縮性:

          通用性

          • HP-Socket 的唯一職責(zé)就是接收和發(fā)送字節(jié)流,不參與應(yīng)用程序的協(xié)議解析等工作。

          • HP-Socket 與應(yīng)用程序通過(guò)接口進(jìn)行交互,并完全解耦。任何應(yīng)用只要實(shí)現(xiàn)了HP-Socket的接口規(guī)范都可以無(wú)縫整合 HP-Socket。

          易用性

          • 易用性對(duì)所有通用框架都是至關(guān)重要的,如果太難用還不如自己重頭寫一個(gè)來(lái)得方便。因此,HP-Socket 的接口設(shè)計(jì)得非常簡(jiǎn)單和統(tǒng)一。

          • HP-Socket 完全封裝了所有底層通信細(xì)節(jié),應(yīng)用程序不必也不能干預(yù)底層通信操作。通信連接被抽象為Connection ID,Connection ID 作為連接的唯一標(biāo)識(shí)提供給應(yīng)用程序來(lái)處理不同的連接。

          • HP-Socket 提供 PUSH / PULL / PACK 等接收模型, 應(yīng)用程序可以靈活選擇以手工方式、 半自動(dòng)方式或全自動(dòng)方式處理封解包, PULL / PACK 接收模型在降低封解包處理復(fù)雜度的同時(shí)能大大減少出錯(cuò)幾率。

          高性能

          • Server 組件:基于IOCP / EPOLL通信模型,并結(jié)合緩存池、私有堆等技術(shù)實(shí)現(xiàn)高效內(nèi)存管理,支持超大規(guī)模、高并發(fā)通信場(chǎng)景。

          • Agent 組件:Agent組件實(shí)質(zhì)上是Multi-Client組件,與Server組件采用相同的技術(shù)架構(gòu)。一個(gè)Agent組件對(duì)象可同時(shí)建立和高效處理大規(guī)模Socket連接。

          • Client 組件:基于Event Select / POLL通信模型,每個(gè)組件對(duì)象創(chuàng)建一個(gè)通信線程并管理一個(gè)Socket連接,適用于小規(guī)模客戶端場(chǎng)景。

          伸縮性

                應(yīng)用程序能夠根據(jù)不同的容量要求、通信規(guī)模和資源狀況等現(xiàn)實(shí)場(chǎng)景調(diào)整 HP-Socket 的各項(xiàng)性能參數(shù)(如:工作線程的數(shù)量、緩存池的大小、發(fā)送模式和接收模式等),優(yōu)化資源配置,在滿足應(yīng)用需求的同時(shí)不必過(guò)度浪費(fèi)資源。

          工作流程

          1. 創(chuàng)建監(jiān)聽(tīng)器對(duì)象

          2. 創(chuàng)建組件對(duì)象(并綁定監(jiān)聽(tīng)器)

          3. 啟動(dòng)組件

          4. 連接遠(yuǎn)程主機(jī)(僅用于Agent組件)

          5. 處理通信事件(OnConnect/OnReceive/OnClose ......)

          6. 停止組件(可選,第7步銷毀組件對(duì)象前會(huì)先停止組件)

          7. 銷毀組件對(duì)象

          8. 銷毀監(jiān)聽(tīng)器對(duì)象

          Agent Workflow

          示例代碼

          • C++

            #include <hpsocket/HPSocket.h>/* Listener Class */
            class CListenerImpl : public CTcpPullServerListener
            {
            
            public:
            	// 5. process network events
            	virtual EnHandleResult OnPrepareListen(ITcpServer* pSender, SOCKET soListen);
            	virtual EnHandleResult OnAccept(ITcpServer* pSender, CONNID dwConnID, UINT_PTR soClient);
            	virtual EnHandleResult OnHandShake(ITcpServer* pSender, CONNID dwConnID);
            	virtual EnHandleResult OnReceive(ITcpServer* pSender, CONNID dwConnID, int iLength);
            	virtual EnHandleResult OnSend(ITcpServer* pSender, CONNID dwConnID, const BYTE* pData, int iLength);
            	virtual EnHandleResult OnClose(ITcpServer* pSender, CONNID dwConnID, EnSocketOperation enOperation, int iErrorCode);
            	virtual EnHandleResult OnShutdown(ITcpServer* pSender);
            };
            
            int main(int argc, char* const argv[])
            {
            	// 1. Create listener object
            	CListenerImpl s_listener;
            	// 2. Create component object (and binding with listener object)
            	CTcpPullServerPtr s_pserver(&s_listener);
            	
            	// 3. Start component object
            	if(!s_pserver->Start("0.0.0.0", 5555))
            		exit(1);
            	
            	/* wait for exit */
            	// ... ... 
            	
            	// 6. (optional) Stop component object
            	s_pserver->Stop()
            
            	return 0;
            	
            	// 7. Destroy component object automatically
            	// 8. Destroy listener object automatically
            }

             

          • C

            #include <hpsocket/HPSocket4C.h>// 5. process network events
            EnHandleResult __HP_CALL OnConnect(HP_Agent pSender, HP_CONNID dwConnID);
            EnHandleResult __HP_CALL OnReceive(HP_Agent pSender, HP_CONNID dwConnID, int iLength);
            EnHandleResult __HP_CALL OnSend(HP_Agent pSender, HP_CONNID dwConnID, const BYTE* pData, int iLength);
            EnHandleResult __HP_CALL OnClose(HP_Agent pSender, HP_CONNID dwConnID, En_HP_SocketOperation enOperation, int iErrorCode);
            EnHandleResult __HP_CALL OnShutdown(HP_Agent pSender);
            
            int main(int argc, char* const argv[])
            {
            	HP_TcpPullAgentListener s_listener;
            	HP_TcpPullAgent s_agent;
            
            	// 1. Create listener object
            	s_listener	= ::Create_HP_TcpPullAgentListener();
            	// 2. Create component object (and binding with listener object)
            	s_agent		= ::Create_HP_TcpPullAgent(s_listener);
            	
            	/* Set listener callbacks */
            	::HP_Set_FN_Agent_OnConnect(s_listener, OnConnect);
            	::HP_Set_FN_Agent_OnSend(s_listener, OnSend);
            	::HP_Set_FN_Agent_OnPullReceive(s_listener, OnReceive);
            	::HP_Set_FN_Agent_OnClose(s_listener, OnClose);
            	::HP_Set_FN_Agent_OnShutdown(s_listener, OnShutdown);
            	
            	// 3. Start component object
            	if(!::HP_Agent_Start(s_agent, "0.0.0.0", TRUE))
            		exit(1);
            	
            	// 4. Connect to dest host
            	::HP_Agent_Connect(s_agent, "remote.host.1", REMOTE_PORT_1, nullptr);
            	::HP_Agent_Connect(s_agent, "remote.host.2", REMOTE_PORT_2, nullptr);
            	::HP_Agent_Connect(s_agent, "remote.host.3", REMOTE_PORT_3, nullptr);
            	
            	/* wait for exit */
            	// ... ... 
            	
            	// 6. (optional) Stop component object
            	::HP_Agent_Stop(s_agent)
            
            	// 7. Destroy component object
            	::Destroy_HP_TcpPullAgent(s_agent);
            	// 8. Destroy listener object
            	::Destroy_HP_TcpPullAgentListener(s_listener);
            	
            	return 0;
            }

             

          • 基礎(chǔ)組件
            基礎(chǔ)組件

          • SSL組件

          • HTTP組件

          瀏覽 23
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          編輯 分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          編輯 分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  色婷婷亚洲1 | 91美女裸体网站 | 狠狠撸大香蕉 | 操操操一级片 | 91人妻澡 |