最新版IOCP_API来袭,你准备好了吗?

shenyi0106 2015-08-20 09:18:30
加精
经历了两三年的沉寂之后,最新版IOCP_API网络编程库终于要来了。它沿袭了1.X版本的简洁设计和简单接口,并且提供更高的效率和更多的扩展功能。
最为关键的是——开源,我会毫无保留的奉送全部源码,coder们可以任意修改发布,而不需要支付一毛钱的版权。
你还在等什么,赶快来下载试用吧。


最新版IOCP_API为2.4版,相比较前面的版本(1.X版本),新版带来了如下好处:
1. 最新的API,数量只有十几个,涵盖了所有应用;也就是说,你仅仅通过这几个API,即可完成整个网络编程框架的搭建。简洁,方便是它与众不同之处。
2. 更高的效率;2.4版IOCP_API库经过优良的设计,使用一个IOCP核心(工作者线程组+内存池+业务线程池)即可完成所有的网络传输应用。
你可以再这个核心上,跑任意数量的TCP服务器,跑任意数量数量的TCP客户端,还可以跑任意数量的UDP服务,甚至你还可以将他们混合来使用。
这些都是在一个核心上完成的。不要羡慕,你已经拥有它了。
3. 更多的扩展功能; 除了传统的TCP和UDP外,2.4版IOCP_API库更是提供了Channel服务,让你无需担心大数据的拆包和组包业务,它完美的帮您处理了。
你认为只有这些?不!还有更多的扩展功能——P2P、UDT和RPC,你是不是已经迫不及待了?
4. 一定的可扩展性;相比1.X版,2.4版提供可一个可编程的内存池接口,您如果觉得我提供的缺省内存池不够完美,您大可以自己实现一个,是不是很棒?!
5. 更简单的数据处理接口;所有的数据都是通过一个接口通知您来处理,不管是传统的TCP和UDP数据包,还是扩展的Channel数据包,您只要关心您注册
的数据处理接口即可,其他的都交给2.4吧。去喝杯咖啡如何?
6. 更人性化和实用化的设计;您一定有过这样的经历,在一个异步网络架构的应用中,您因为一些特殊原因,需要一个同步接口,那是一件多么烦人的事情啊!
现在好了,有了2.4,这一切都解决了,它提供了RPC接口,可以满足您的这个要求。同时由于它是用的异步模拟的同步的方式,所以也无需担心它的效率问题。
7. 更多的实用工具;除了提供便捷的网络编程接口外,2.4还提供很多实用工具,比如一个DBPool(基于ADO组件)——让你随心所欲的使用数据库;
一个zlib压缩组件,一个FIFO队列等等,都是您编写网络程序必不可少的。


是不是很期待了?下面,我们来解开庐山真面路,走进IOCP_API。
在IOCP_API.h中定义的所有的编程库所提供接口API,下面是接口API列表:

[cpp] view plaincopy
IOCP_API HANDLE IOCPStartup(INT iWorkThread, INT iThreadPool);
IOCP_API RetCode IOCPCleanup(HANDLE hIocp);

IOCP_API ICache* IOCPCreateCache(INT iMinNum, INT iMaxNum);
IOCP_API RetCode IOCPDestroyCache(ICache *pCache);

IOCP_API TCPListener* IOCPCreateListener(HANDLE hIocp, INT iBindPort);
IOCP_API TCPSocket* IOCPCreateClient(HANDLE hIocp, INT iBindPort);
IOCP_API UDPSocket* IOCPCreateSocket(HANDLE hIocp, INT iBindPort);
IOCP_API RetCode IOCPDestorySocket(Socket* pSocket, SocketType sockType);

IOCP_API ADOPool* IOCPCreatePool(INT nMinPoolSize, INT nMaxPoolSize, const CHAR *pszConnStr);
IOCP_API RetCode IOCPDestoryPool(ADOPool *pAdoPool);

IOCP_API RetCode IOCPUnhandledException(IExceptionHandle *exception);

IOCP_API ILogger* IOCPCreateLogger(const CHAR *pszLogPath);
IOCP_API RetCode IOCPDestoryLogger(ILogger *pLogger);

IOCP_API IBuffer* IOCPCreateQueue(INT nCapacity);
IOCP_API RetCode IOCPDestoryQueue(IBuffer *pBuffer);
看到这些接口,是不是觉得如此高效的网络编程接口竟然如此简单?答案却是如此,就是如此简单。您不需要了解IOCP的原理,甚至都不需要了解
网络通讯的原理,通过这些接口,您只要关心您的业务逻辑即可,其他的,都交给2.4吧。


与这些API相对应,在ISocket.h文件中,定义了相关的接口类,把相关功能都进行了封装,完全面向对象的编程方式,更适合传统的C++ coder们。
...全文
4665 3 收藏 58
写回复
58 条回复
切换为时间正序
请发表友善的回复…
发表回复
wxpscan 2017-03-11
太全面了,点赞
回复
随机酱油 2016-09-07
回复
Syee001 2016-03-23
谢谢楼主分享!!!!
回复
hkk001 2016-01-22
好牛逼~学习的说 收藏啦
回复
zhiyuandigital 2015-10-23
这个一定要顶,IOCP我一直没做好,学习了,谢谢....
回复
brk1985 2015-08-27
好内容,mark下。。。
回复
HaoYuan 2015-08-27
kaiyuande 定
回复
cih006 2015-08-26
太牛B了,经过各种测试了么?
回复
一步一光年 2015-08-26
谢谢分享,要的分太多了
回复
dong364 2015-08-26
可惜IOCP只是windows上的东东,况且开源的库也一大把,什么ACE、boost的asio、redis、libevent了,感觉这些库才可商用,不过楼主奉献源码的精神可佳,值得参考,不可商用
回复
涛洋 2015-08-25
关注。。。。
回复
chenyu2202863 2015-08-25
引用 8 楼 jiqiang01234 的回复:
简单说一下感觉,难免管中窥豹; 1、楼主似乎对“接口”比较偏爱,感觉不必要的地方也都变成了接口,比如buffer的定义 2、网络库很重要的的考虑就是如何管理socket会话,在c++智能指针已经成为标准的今天,依然用原始指针来管理,对用户来说需要格外小心。一旦一个socket在别的线程销毁,而其他引用此socket的线程没有通知到已经销毁时,就会出问题 3、个人喜好吧,我觉得可以把类型命名、函数命名更中性一些,现在太过windows化了(虽然iocp是windows特有的) 4、代码有些随意,比如下面的sleep。毕竟sleep不是同步原语,如果需要等待,最好用WaitForSingleObject()之类的等待函数。

   RetCode CloseSocket(VOID)  
     {  
         if (m_hSocket != INVALID_SOCKET)  
         {  
             CancelIo((HANDLE)m_hSocket);  
             Sleep(500);  
             closesocket(m_hSocket);  
             Sleep(500);  
             m_socketType = ST_NONE;  
             m_hSocket = INVALID_SOCKET;  
         }  
         return RET_ESUC;  
     }  
正是我想说的,你的接口其实不简单,而且似乎很复杂 你应该提供的是库,可是却很多限制,难免让使用者畏手畏脚,不过精神值得肯定!
回复
mr_chenyi 2015-08-25
下载积分怎么获得?
回复
mr_chenyi 2015-08-25
接受任務提示IP超出領取獎勵的最高限制 是什麼意思
回复
laoer_2002 2015-08-24
谢谢楼主分享!
回复
这不是鸭头 2015-08-24
感谢分享。不过现在貌似windows的开发越来越少
回复
fhw217 2015-08-23
回复
回复
ljm_7474 2015-08-22
收入口袋先…
回复
足球中国 2015-08-21
功能上没有啥新意啊。不如哥的。
回复
发动态
发帖子
网络编程
创建于2007-09-28

1.8w+

社区成员

VC/MFC 网络编程
申请成为版主
社区公告
暂无公告