主頁 > 軟體工程 > 跨年呈獻:HP-Socket for Linux 1.0 震撼發布

跨年呈獻:HP-Socket for Linux 1.0 震撼發布

2020-09-18 17:23:12 軟體工程


        三年,三年,又三年,終于,終于,終于不用再等啦!就在今天,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>

/* 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 __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熱心網友回復:

參考 15 樓 jzycode 的回復:
只能膜拜了,多向樓主學習了。

順便問下,樓主是否有開發一套適合視頻直播的網路協議的打算?


實在沒有時間研究太多東西,最近一直在忙公司的 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熱心網友回復:

參考 28 樓 worldy 的回復:
真心為LZ點贊,10年如一日,無私的奉獻

都快打破十萬小時定律了吧。

uj5u.com熱心網友回復:

參考 34 樓 zhao4zhong1 的回復:
Quote: 參考 28 樓 worldy 的回復:

真心為LZ點贊,10年如一日,無私的奉獻

都快打破十萬小時定律了吧。


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之類控制元件顯示啊

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • Git本地庫既關聯GitHub又關聯Gitee

    創建代碼倉庫 使用gitee舉例(github和gitee差不多) 1.在gitee右上角點擊+,選擇新建倉庫 ? 2.選擇填寫倉庫資訊,然后進行創建 ? 3.服務端已經準備好了,本地開始作準備 (1)Git 全域設定 git config --global user.name "成鈺" git c ......

    uj5u.com 2020-09-10 05:04:14 more
  • CODING DevOps 代碼質量實戰系列第二課,相約周三

    隨著 ToB(企業服務)的興起和 ToC(消費互聯網)產品進入成熟期,線上故障帶來的損失越來越大,代碼質量越來越重要,而「質量內建」正是 DevOps 核心理念之一。**《DevOps 代碼質量實戰(PHP 版)》**為 CODING DevOps 代碼質量實戰系列的第二課,同時也是本系列的 PHP ......

    uj5u.com 2020-09-10 05:07:43 more
  • 推薦Scrum書籍

    推薦Scrum書籍 直接上干貨,推薦書籍清單如下(推薦有順序的哦) Scrum指南 Scrum精髓 Scrum敏捷軟體開發 Scrum捷徑 硝煙中的Scrum和XP : 我們如何實施Scrum 敏捷軟體開發:Scrum實戰指南 Scrum要素 大規模Scrum:大規模敏捷組織的設計 用戶故事地圖 用 ......

    uj5u.com 2020-09-10 05:07:45 more
  • CODING DevOps 代碼質量實戰系列最后一課,周四發車

    隨著 ToB(企業服務)的興起和 ToC(消費互聯網)產品進入成熟期,線上故障帶來的損失越來越大,代碼質量越來越重要,而「質量內建」正是 DevOps 核心理念之一。 **《DevOps 代碼質量實戰(Java 版)》**為 CODING DevOps 代碼質量實戰系列的最后一課,同時也是本系列的 ......

    uj5u.com 2020-09-10 05:07:52 more
  • 敏捷軟體工程實踐書籍

    Scrum轉型想要做好,第一步先了解并真正落實Scrum,那么我推薦的Scrum書籍是要看懂并實踐的。第二步是團隊的工程實踐要做扎實。 下面推薦工程實踐書單: 重構:改善既有代碼的設計 決議極限編程 : 擁抱變化 代碼整潔代碼 程式員的職業素養 修改代碼的藝術 撰寫可讀代碼的藝術 測驗驅動開發 : ......

    uj5u.com 2020-09-10 05:07:55 more
  • Jenkins+svn+nginx實作windows環境自動部署vue前端專案

    前面文章介紹了Jenkins+svn+tomcat實作自動化部署,現在終于有空抽時間出來寫下Jenkins+svn+nginx實作自動部署vue前端專案。 jenkins的安裝和配置已經在前面文章進行介紹,下面介紹實作vue前端專案需要進行的哪些額外的步驟。 注意:在安裝jenkins和nginx的 ......

    uj5u.com 2020-09-10 05:08:49 more
  • CODING DevOps 微服務專案實戰系列第一課,明天等你

    CODING DevOps 微服務專案實戰系列第一課**《DevOps 微服務專案實戰:DevOps 初體驗》**將由 CODING DevOps 開發工程師 王寬老師 向大家介紹 DevOps 的基本理念,并探討為什么現代開發活動需要 DevOps,同時將以 eShopOnContainers 項 ......

    uj5u.com 2020-09-10 05:09:14 more
  • CODING DevOps 微服務專案實戰系列第二課來啦!

    近年來,工程專案的結構越來越復雜,需要接入合適的持續集成流水線形式,才能滿足更多變的需求,那么如何優雅地使用 CI 能力提升生產效率呢?CODING DevOps 微服務專案實戰系列第二課 《DevOps 微服務專案實戰:CI 進階用法》 將由 CODING DevOps 全堆疊工程師 何晨哲老師 向 ......

    uj5u.com 2020-09-10 05:09:33 more
  • CODING DevOps 微服務專案實戰系列最后一課,周四開講!

    隨著軟體工程越來越復雜化,如何在 Kubernetes 集群進行灰度發布成為了生產部署的”必修課“,而如何實作安全可控、自動化的灰度發布也成為了持續部署重點關注的問題。CODING DevOps 微服務專案實戰系列最后一課:**《DevOps 微服務專案實戰:基于 Nginx-ingress 的自動 ......

    uj5u.com 2020-09-10 05:10:00 more
  • CODING 儀表盤功能正式推出,實作作業資料可視化!

    CODING 儀表盤功能現已正式推出!該功能旨在用一張張統計卡片的形式,統計并展示使用 CODING 中所產生的資料。這意味著無需額外的設定,就可以收集歸納寶貴的作業資料并予之量化分析。這些海量的資料皆會以圖表或串列的方式躍然紙上,方便團隊成員隨時查看各專案的進度、狀態和指標,云端協作迎來真正意義上 ......

    uj5u.com 2020-09-10 05:11:01 more
最新发布
  • windows系統git使用ssh方式和gitee/github進行同步

    使用git來clone專案有兩種方式:HTTPS和SSH:
    HTTPS:不管是誰,拿到url隨便clone,但是在push的時候需要驗證用戶名和密碼;
    SSH:clone的專案你必須是擁有者或者管理員,而且需要在clone前添加SSH Key。SSH 在push的時候,是不需要輸入用戶名的,如果配置... ......

    uj5u.com 2023-04-19 08:41:12 more
  • windows系統git使用ssh方式和gitee/github進行同步

    使用git來clone專案有兩種方式:HTTPS和SSH:
    HTTPS:不管是誰,拿到url隨便clone,但是在push的時候需要驗證用戶名和密碼;
    SSH:clone的專案你必須是擁有者或者管理員,而且需要在clone前添加SSH Key。SSH 在push的時候,是不需要輸入用戶名的,如果配置... ......

    uj5u.com 2023-04-19 08:35:34 more
  • 2023年農牧行業6大CRM系統、5大場景盤點

    在物聯網、大資料、云計算、人工智能、自動化技術等現代資訊技術蓬勃發展與逐步成熟的背景下,數字化正成為農牧行業供給側結構性變革與高質量發展的核心驅動因素。因此,改造和提升傳統農牧業、開拓創新現代智慧農牧業,加快推進農牧業的現代化、資訊化、數字化建設已成為農牧業發展的重要方向。 當下,企業數字化轉型已經 ......

    uj5u.com 2023-04-18 08:05:44 more
  • 2023年農牧行業6大CRM系統、5大場景盤點

    在物聯網、大資料、云計算、人工智能、自動化技術等現代資訊技術蓬勃發展與逐步成熟的背景下,數字化正成為農牧行業供給側結構性變革與高質量發展的核心驅動因素。因此,改造和提升傳統農牧業、開拓創新現代智慧農牧業,加快推進農牧業的現代化、資訊化、數字化建設已成為農牧業發展的重要方向。 當下,企業數字化轉型已經 ......

    uj5u.com 2023-04-18 08:00:18 more
  • 計算機組成原理—存盤器

    計算機組成原理—硬體結構 二、存盤器 1.概述 存盤器是計算機系統中的記憶設備,用來存放程式和資料 1.1存盤器的層次結構 快取-主存層次主要解決CPU和主存速度不匹配的問題,速度接近快取 主存-輔存層次主要解決存盤系統的容量問題,容量接近與價位接近于主存 2.主存盤器 2.1概述 主存與CPU的聯 ......

    uj5u.com 2023-04-17 08:20:31 more
  • 談一談我對協同開發的一些認識

    如今各互聯網公司普通都使用敏捷開發,采用小步快跑的形式來進行專案開發。如果是小專案或者小需求,那一個開發可能就搞定了。但對于電商等復雜的系統,其功能多,結構復雜,一個人肯定是搞不定的,所以都是很多人來共同開發維護。以我曾經待過的商城團隊為例,光是后端開發就有七十多人。 為了更好地開發這類大型系統,往 ......

    uj5u.com 2023-04-17 08:18:55 more
  • 專案管理PRINCE2核心知識點整理

    PRINCE2,即 PRoject IN Controlled Environment(受控環境中的專案)是一種結構化的專案管理方法論,由英國政府內閣商務部(OGC)推出,是英國專案管理標準。
    PRINCE2 作為一種開放的方法論,是一套結構化的專案管理流程,描述了如何以一種邏輯性的、有組織的方法,... ......

    uj5u.com 2023-04-17 08:18:51 more
  • 談一談我對協同開發的一些認識

    如今各互聯網公司普通都使用敏捷開發,采用小步快跑的形式來進行專案開發。如果是小專案或者小需求,那一個開發可能就搞定了。但對于電商等復雜的系統,其功能多,結構復雜,一個人肯定是搞不定的,所以都是很多人來共同開發維護。以我曾經待過的商城團隊為例,光是后端開發就有七十多人。 為了更好地開發這類大型系統,往 ......

    uj5u.com 2023-04-17 08:18:00 more
  • 專案管理PRINCE2核心知識點整理

    PRINCE2,即 PRoject IN Controlled Environment(受控環境中的專案)是一種結構化的專案管理方法論,由英國政府內閣商務部(OGC)推出,是英國專案管理標準。
    PRINCE2 作為一種開放的方法論,是一套結構化的專案管理流程,描述了如何以一種邏輯性的、有組織的方法,... ......

    uj5u.com 2023-04-17 08:17:55 more
  • 計算機組成原理—存盤器

    計算機組成原理—硬體結構 二、存盤器 1.概述 存盤器是計算機系統中的記憶設備,用來存放程式和資料 1.1存盤器的層次結構 快取-主存層次主要解決CPU和主存速度不匹配的問題,速度接近快取 主存-輔存層次主要解決存盤系統的容量問題,容量接近與價位接近于主存 2.主存盤器 2.1概述 主存與CPU的聯 ......

    uj5u.com 2023-04-17 08:12:06 more