跨年呈献:HP-Socket for Linux 1.0 震撼发布

栏目: 软件资讯 · 发布时间: 8年前

内容简介:三年,三年,又三年,终于,终于,终于不用再等啦!就在今天,HP-Socket for Linux v1.0 震撼发布!还是一样的接口,一样的高效,一样的简便,一样的味道。 HP-Socket for Linux提供了与Windows版本一致的API接口...

跨年呈献:HP-Socket for Linux 1.0 震撼发布

三年,三年,又三年,终于,终于,终于不用再等啦!就在今天,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连接,适用于小规模客户端场景。

安装指引

$ 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. 销毁监听器对象

跨年呈献:HP-Socket for Linux 1.0 震撼发布

示例代码

  • 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组件。

跨年呈献:HP-Socket for Linux 1.0 震撼发布


【声明】文章转载自:开源中国社区 [http://www.oschina.net]


以上所述就是小编给大家介绍的《跨年呈献:HP-Socket for Linux 1.0 震撼发布》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Probability and Computing

Probability and Computing

Michael Mitzenmacher、Eli Upfal / Cambridge University Press / 2005-01-31 / USD 66.00

Assuming only an elementary background in discrete mathematics, this textbook is an excellent introduction to the probabilistic techniques and paradigms used in the development of probabilistic algori......一起来看看 《Probability and Computing》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

随机密码生成器
随机密码生成器

多种字符组合密码