IOCP_API组件来搭建TCP服务器
来源:互联网 发布:任意修改手机号码软件 编辑:程序博客网 时间:2024/05/16 11:44
转自论坛:http://topic.csdn.net/u/20110127/16/e4da4738-9be3-45bb-bf9c-9e46ebce98e7.html?42267
本文基于沈毅(shenyi0106@163.com qq:52851771)所提供的IOCP_API组件来搭建TCP服务器。
下载地址:http://download.csdn.net/source/2960211本文适用于对winsock有一定了解的开发者,当然,如果你不了解winsock也没有关系,IOCP_API为您提供了高度封装的API,您只需要定义几个回调函数,调用几个API即可完成服务器搭建工作,使您可以专注于业务逻辑处理,而无需了解了解通讯底层。
如果您需要解压缩支持,可以加上Compress.h头文件;如果需要提供大数据包支持,可以加上Packet.h头文件。
下面将介绍如何使用IOCP_API组件:
首先,导入IOCPServer.h头文件。如果你的工程中不包括socket支持,那查看IOCPServer.h头文件,将部分注释打开。
其次,定义回调函数。共有三个回调函数,分别是数据处理回调,连接处理回调和连接关闭回调,定义格式如下:
- C/C++ code
- //数据处理回调 void DataProcCallBack(SOCKET socket, char * recvBuf, int len); //连接处理回调 BOOL OnConn(SOCKET socket, char * ip, int port); //连接关闭回调 void OnClientClose(SOCKET socket, char * ip, int port);
如果是定义类成员函数,请将函数定义成静态成员函数,原因省略万字......
再次,调用IOCP_API的函数初始化并启动服务器:
- C/C++ code
- HANDLE m_hIocp = IOCPInitServer(DataProcCallBack,OnConn,OnClientClose,4,5000,10);
- C/C++ code
- //设置服务器参数(可选) IOCPSetMaxAccept(20000); //设置最大可以接受的客户端数量 IOCPSetTickTime(300); //设置服务器心跳检测的间隔时间,单位是秒
最后,如果你在初始化时已经设置了线程池模式,那么你只需要在你的DataProcCallBack函数里专心处理你自己的业务逻辑即可。当然这里不用线程池模式也可以,完全取决于你自己的业务需求。
如果需要回发数据,通过IOCPSend函数发送。
在此组件中还提供很多其他的辅助功能,比如:
调用IOCPCloseClient可以强制关闭某个连接,IOCPGetClientCount可以获得当前客户端数,IOCPGetSocketName获得本地IP信息,IOCPGetPeerName获得远端IP信息,
IOCPSetUserData可以设置句柄相关的任何数据,IOCPGetUserData获得句柄相关的任何数据。
性能怎么说呢,由于没有测试环境,只做过三四台机器5K多的echo(500ms间隔)并发测试,服务器是普通的双核PC,100M网络,只能说资源占用率比较低,CPU控制在10%以下,内存占用也很低。
程序的不足:
1. 采用Accept + 线程模式来接受客户端连接,在大规模并发连接时会丢失一些客户端连接。
2. 由于采用了内存池管理内存,所以长时间运行不会出现过多的内存碎片,但是由于所采用的内存池是只增加不减少的,也就导致长时间大规模处理数据时,会导致内存上涨,但是业务量下降时,内存占用量并不会减小。
3.虽然写这个库已经有一段时间了,但是由于对IOCP的理解可能还不是那么好,组件难免回有问题,也请大家多多指教。
- IOCP_API组件来搭建TCP服务器
- 来一个最简单的TCP服务器
- 基于 Erlang/OTP 搭建TCP服务器
- 基于 Erlang/OTP 搭建TCP服务器
- 基于Node.js搭建TCP聊天服务器
- VLC搭建基于TCP的流媒体服务器
- 基于 Erlang/OTP 搭建TCP服务器
- 搭建TCP服务器环境和jmeter测试TCP协议
- 使用 VisualSVN Server来搭建SVN服务器
- 使用Gitblit来搭建Git服务器
- 用telnet来测试你自己写的TCP服务器
- Ubuntu利用TCP协议来获取服务器时间
- TCP服务器搭建(代码实现)及SO_REUSEADDR解析
- Android搭建简单的socket服务器——基于TCP
- 搭建Twisted Reactor TCP 服务器与客户端(文末有福利)
- 基于TCP的服务器与客户端的搭建
- 基于 Erlang/OTP 搭建TCP服务器(erlc *.erl)
- 搭建图片服务器《一》-linux安装ftp组件
- 黑马程序员—方法重载日志总结
- 如何提高网站浏览速度 思维导图
- o.boj 1031 考古学家SuperRock的新发现
- winform 实现批量删除
- Visual Studio 2005/2008/2010 常用快捷键
- IOCP_API组件来搭建TCP服务器
- Linux防火墙配置
- 邮箱主机 网易 腾讯 新浪 搜狐
- o.boj 1033 冥王星的故事I-来自Pluto的军队
- 整数划分问题:输出一个整数的所有划分并统计总划分数
- oracle同义词
- 棋盘覆盖
- Android 获取assets的绝对路径
- ORA-00054: 资源正忙,要求指定 NOWAIT