打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
C# 使用 SocketAsyncEventArgs 实现UdpSocket系列

         .NET Framework 2.0SP1及以后版本提供了一组用于网络通信的增强功能类库,SocketAsyncEventArgs 就是其中最重要的一个,下面是MSDN对这组增强功能的类库的介绍。

 

    System.Net.Sockets.Socket 类有一组增强功能,提供可供专用的高性能套接字应用程序使用的可选异步模式,SocketAsyncEventArgs 类就是这一组增强功能的一部分。该类专为需要高性能的网络服务器应用程序而设计。应用程序可以完全使用增强的异步模式,也可以仅仅在目标热点区域(例如,在接收大量数据时)使用此模式。

    
    这些增强功能的主要特点是可以避免在异步套接字
I/O 量非常大时发生重复的对象分配和同步。当前由 System.Net.Sockets.Socket 类实现的开始/结束设计模式要求为每个异步套接字操作分配一个 System.IAsyncResult 对象。

 

在新的 System.Net.Sockets.Socket 类增强功能中,异步套接字操作由分配的可重用 SocketAsyncEventArgs 对象描述并由应用程序维护。高性能套接字应用程序非常清楚地知道必须保持的重叠的套接字操作的量。应用程序可以根据需要创建任意多的 SocketAsyncEventArgs 对象。例如,如果服务器应用程序需要总是有 15 个未完成的套接字接收操作来支持传入客户端连接率,那么可以为此分配 15 个可重用的 SocketAsyncEventArgs 对象。

 

使用此类执行异步套接字操作的模式包含以下步骤:

 

1.         分配一个新的 SocketAsyncEventArgs 上下文对象,或者从应用程序池中获取一个空闲的此类对象。

 

2.         将该上下文对象的属性设置为要执行的操作(例如,完成回调方法、数据缓冲区、缓冲区偏移量以及要传输的最大数据量)。

 

3.         调用适当的套接字方法 (xxxAsync) 以启动异步操作。

 

4.         如果异步套接字方法 (xxxAsync) 返回 true,则在回调中查询上下文属性来获取完成状态。

 

5.         如果异步套接字方法 (xxxAsync) 返回 false,则说明操作是同步完成的。可以查询上下文属性来获取操作结果。

 

6.         将该上下文重用于另一个操作,将它放回到应用程序池中,或者将它丢弃。

 

新的异步套接字操作上下文对象的生命周期由应用程序代码引用和异步 I/O 引用决定。在对异步套接字操作上下文对象的引用作为一个参数提交给某个异步套接字操作方法之后,应用程序不必保留该引用。它将在完成回调返回之前一直保持引用。但是,应用程序保留对上下文的引用是有好处的,这样该引用就可以重用于将来的异步套接字操作。

 

MSDN 也提供了一个简单的使用 SocketAsyncEventArgs TCP 通信示例,从示例可以了解 SocketAsyncEventArgs 使用的基本方法。本系列文章将介绍如何使用 SocketAsyncEventArgs 进行 UDP 通信,最终将实现一个类似与 UdpClient 类功能的 UdpSocket 组件,本系列文章初步分文以下几部分:

 

1、  基于UdpSocket的通通信示例,服务端和客户端。

2、  UdpSocket 缓冲区 BufferManager 介绍

3、  UdpSocket SocketAsyncEventArgs 缓存池的实现

4、  UdpSocket 实现介绍

 

目的是通过上面几部分的介绍,学习:

1、  当需要申请大量的内存空间的时候,如何设计和使用缓冲区。

2、  当需要不停的实例化和销毁一个对象,如何设计和使用缓存池(WeakReference的使用)。

3、  了解 SocketAsyncEventArgs 的使用。

 

本人也是第一次对 SocketAsyncEventArgs 进行了解和使用,欢迎大家多多交流,指出理解错误的地方。

 

声明:

本文版权归作者和CS 程序员之窗所有,欢迎转载,转载必须保留以下版权信息,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

作者:Starts_2000

出处:CS 程序员之窗 http://www.csharpwin.com

你可以免费使用或修改提供的源代码,但请保留源代码中的版权信息,详情请查看:

CS程序员之窗开源协议 http://www.csharpwin.com/csol.html

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
.NET3.5中的高性能 Socket API
CSocket::CancelBlockingCall
Socket 阻塞与非阻塞模式
.NET 中进程、线程、应用程序域、对象上下文总结
ActionBar应用开发讲解
什么是设备上下文?
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服