文档库 最新最全的文档下载
当前位置:文档库 › 基于完成端口实现socket通信的研究

基于完成端口实现socket通信的研究

龙源期刊网 https://www.wendangku.net/doc/a6510510.html,

基于完成端口实现socket通信的研究

作者:冯海东

来源:《智富时代》2015年第12期

【摘要】在Windows平台上实现基于Socket的TCP通信有很多种途径,微软给出了多种套接字模型,这些套接字模型中最复杂同时性能最高的是完成端口模型;本文基于windows平台提供的IO完成端口实现一套高性能TCP通信库,并以伪代码的方式进行了讲解。

【关键词】Socket;IO完成端口;客户端;服务端

一、简介

Winsock一共给我们提供了5种IO套接字模型,它们分别是select模型、WSAAyncSelect 模型、WSAEventSelect模型、重叠IO模型和完成端口模型。前面四种模型比较简单,它们对于处理异步IO请求提供了一套完整的解决方案;但是前四种模型的无法管理众多的套接字,无法满足大量连接的并发数据通信需求。

完成端口是一种WINDOWS内核对象,英文是I/O Completion Port(缩写为IOCP)。完成端口内部提供了线程池的管理,可以避免反复创建线程的开销,同时可以根据CPU的个数灵活的决定线程个数,而且可以让减少线程调度的次数从而提高性能。由于这一点,也有很多人把完成端口当成一个线程池来用的。目前完成端口基本上被公认为一种在windows服务平台上比较成熟和高效的IO方法,利用完成端口进行重叠I/O的技术在WindowsNT、

WIndows2000、Windows2003和Windows2008上提供了真正的可扩展性。完成端口和Windows Socket2.0结合很好的解决大量连接的并发数据通信问题。

二、客户端设计

客户端通信库主要由CMySocketClientEx、WorkerThread和CSocket三个类来实现。CMySocketClientEx类中最主要的是提供了完成端口和定义了完成事件;并且向外提供动态库到导出函数;导出函数主要包括建立连接函数(AppendConnection)、发送数据函数(WriteBuffer)和断开连接函数(FinishConnection);同时提供回调函数接口,以便向调用者通知一些网络事件,如服务端断开连接、收到服务端数据等。WorkerThread则是封装的工作线程类,为完成端口提供工作线程;这个类为通信库内部使用,不对外提供导出函数。主要提供线程的创建、线程的结束等。CSocket则是用于封装链路信息和套接字;便于通信库管理不同的链路和套接字。图1为客户端通信库的主要结构。

(一)建立连接流程

客户端建立连时首先创建Socket对相,并将其中套接字绑定在IOCP上,最后调用ConnetEx进行异步连接,之后系统就会自己去做连接;通过调用

相关文档
相关文档 最新文档