三年,三年,又三年,终于,终于,终于不用再等啦!就在今天,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的插件后即可自行编译。当然,你也可以自己编写makefile文件来编译这些代码。
注:hp-socket for linux的编译和运行需要2.6.32及以上版本的linux内核。
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 ----------------- ------------------------------------------------
工作流程
- 创建监听器对象
- 创建组件对象(并绑定监听器)
- 启动组件
- 连接远程主机(仅用于agent组件)
- 处理通信事件(onconnect/onreceive/onclose ......)
- 停止组件(可选,第7步销毁组件对象前会先停止组件)
- 销毁组件对象
- 销毁监听器对象
示例代码
- c 示例
#include
/* 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
// 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组件。