
三年,三年,又三年,終于,終于,終于不用再等啦!就在今天,HP-Socket for Linux v1.0 震撼發布!還是一樣的介面,一樣的高效,一樣的簡便,一樣的味道。
HP-Socket for Linux提供了與Windows版本一致的API介面,實作代碼則完全獨立。HP-Socket for Linux使用了C++14標準的新特性,需要GCC 5.x以上版本的編譯器來編譯。發布包中提供了HP-Socket組件及示例Demo的Visual Studio專案工程,安裝配置好Visual Studio的Visual C++ for Linux Development插件后即可自行編譯。當然,你也可以自己撰寫Makefile檔案來編譯這些代碼。
注:HP-Socket for Linux的編譯和運行需要2.6.32及以上版本的Linux內核。
HP-Socket提供以下幾類組件,詳細內容請參考《HP-Socket網路通信框架開發指南》:
Server:基于IOCP / EPOLL通信模型,并結合快取池、私有堆等技術實作高效記憶體管理,支持超大規模、高并發通信場景。
Agent:Agent組件實質上是Multi-Client組件,與Server組件采用相同的技術架構。一個Agent組件物件可同時建立和高效處理大規模Socket連接。
Client:基于Event Select / POLL通信模型,每個組件物件創建一個通信執行緒并管理一個Socket連接,適用于小規模客戶端場景。
* HP-Socket 官方網站:http://www.jessma.org
* HP-Socket 專案主頁:https://github.com/ldcsaa/HP-Socket
* HP-Socket 開發檔案:http://www.oschina.net/p/hp-socket/doc
安裝指引
$ sudo ./install.sh -h
Usage: install.sh [...O.P.T.I.O.N.S...]
-----------------+------------------------------------------------
-p|--prefix : install/uninstall path (default: /usr/local)
-l|--libdir : lib dir (default: x86 -> lib, x64 -> lib64)
-d|--with-demo : install demos or not (default: true)
-u|--uninstall : execute uninstall operation from install path
-v|--version : print installing hp-socket version
-h|--help : print this usage message
-----------------+------------------------------------------------
作業流程
1. 創建監聽器物件
2. 創建組件物件(并系結監聽器)
3. 啟動組件
4. 連接遠程主機(僅用于Agent組件)
5. 處理通信事件(OnConnect/OnReceive/OnClose ......)
6. 停止組件(可選,第7步銷毀組件物件前會先停止組件)
7. 銷毀組件物件
8. 銷毀監聽器物件

示例代碼
* C++ 示例
#include <hpsocket/HPSocket.h>* C 示例
/* 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
}
#include <hpsocket/HPSocket4C.h>
// 5. process network events
EnHandleResult __stdcall OnConnect(HP_Agent pSender, HP_CONNID dwConnID);
EnHandleResult __stdcall OnReceive(HP_Agent pSender, HP_CONNID dwConnID, int iLength);
EnHandleResult __stdcall OnSend(HP_Agent pSender, HP_CONNID dwConnID, const BYTE* pData, int iLength);
EnHandleResult __stdcall OnClose(HP_Agent pSender, HP_CONNID dwConnID, En_HP_SocketOperation enOperation, int iErrorCode);
EnHandleResult __stdcall 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_HasStarted(s_agent))
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;
}
組件串列
HP-Socket for Linux v1.0目前發布了一系列基礎組件,后續版本將會陸續發布SSL組件和HTTP組件。
uj5u.com熱心網友回復:
你這么6,我還能說啥呢uj5u.com熱心網友回復:
upup Monster!
uj5u.com熱心網友回復:
沙發自己坐,跪求上首頁~~
uj5u.com熱心網友回復:
一直在用,非常號uj5u.com熱心網友回復:
厲害了,怪獸uj5u.com熱心網友回復:
必須頂,感謝樓主uj5u.com熱心網友回復:
uj5u.com熱心網友回復:
uj5u.com熱心網友回復:
前排,感謝樓主對開源做出的貢獻uj5u.com熱心網友回復:
牛牛牛
uj5u.com熱心網友回復:
很好,很好,很好哇.非常好用uj5u.com熱心網友回復:
用了很久,很穩定,很牛逼的框架!uj5u.com熱心網友回復:
大贊,感謝分享
uj5u.com熱心網友回復:
uj5u.com熱心網友回復:
只能膜拜了,多向樓主學習了。順便問下,樓主是否有開發一套適合視頻直播的網路協議的打算?
uj5u.com熱心網友回復:
Linux版讓大家久等了,怪不好意思的~
uj5u.com熱心網友回復:
實在沒有時間研究太多東西,最近一直在忙公司的 Spring Cloud,elasticsearch,。。。
uj5u.com熱心網友回復:
很不錯的框架 從3.3.1版本用到現在,算起來也兩年多了uj5u.com熱心網友回復:
好樣子的,堅持可貴,開源更可貴uj5u.com熱心網友回復:
Linux終于出來了。。。馬上研究下uj5u.com熱心網友回復:
支持,,,,,感謝分享uj5u.com熱心網友回復:
真的是好東西啊。uj5u.com熱心網友回復:
支持一下支持一下支持一下支持一下支持一下支持一下支持一下支持一下支持一下支持一下支持一下uj5u.com熱心網友回復:
uj5u.com熱心網友回復:
hp的window版本我們公司產品用了一年多,運行始終很穩定,效率很高,可見作者扎實的功底。這次推出linux版本,可謂眾望所歸,感謝做些,感謝這些為開源軟體做貢獻的技術大牛們uj5u.com熱心網友回復:
uj5u.com熱心網友回復:
uj5u.com熱心網友回復:
真心為LZ點贊,10年如一日,無私的奉獻
uj5u.com熱心網友回復:
http://blog.csdn.net/zanfeng?ref=toolbar我的這個也有十年了。
uj5u.com熱心網友回復:
uj5u.com熱心網友回復:
震撼發布!!!uj5u.com熱心網友回復:
好東西,感謝分享。uj5u.com熱心網友回復:
頂lz,太牛了。感謝分享!uj5u.com熱心網友回復:
都快打破十萬小時定律了吧。
uj5u.com熱心網友回復:
LZ必須獲得贊美


uj5u.com熱心網友回復:
兩個字“厲害”
uj5u.com熱心網友回復:
頂頂頂頂頂 說的不錯 謝謝分享 感謝uj5u.com熱心網友回復:
uj5u.com熱心網友回復:
樓主,官網掛了!uj5u.com熱心網友回復:
這套框架是運行在Linux上的嗎?我看到了for linux,我不是從事純軟體的開發,所以不懂,見諒uj5u.com熱心網友回復:
0.0......................uj5u.com熱心網友回復:
贊開源精神。uj5u.com熱心網友回復:
終端支持android不?uj5u.com熱心網友回復:
高性能網路通信框架 HP-Socket v5.2.1 發布http://bbs.csdn.net/topics/392317157
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/75327.html
標籤:網絡編程
上一篇:vs2015環境下組建opencv3.2 測驗出現了這個問題,大神們看看
下一篇:我想在mfc程式的選單里邊,回應一個滑鼠雙擊的事件,然后通過互動可以把滑鼠點擊地方的屬性,通過一個東西顯示出來,應該怎么寫啊,可不可以通過edit之類控制元件顯示啊
