c# SocketAsyncEventArgs类使用

要编写高性能的Socket服务器,为每个接收的Socket分配独立的处理线程的做法是不可取的,当连接数量很庞大时,服务器根本无法应付。要响应庞大的连接数量,需要使用IOCP(完成端口)来撤换并处理响应。

.net framework的System.Net.Sockets.Socket 类有一组xxxAsync方法是封装了IOCP的处理,用于编写高性能Socket应用程序,xxxAsync该组方法需要结合SocketAsyncEventArgs类来使用,下面是MSDN参考资料,里面有一个详细的例子:

http://msdn.microsoft.com/zh-cn/library/system.net.sockets.socketasynceventargs.aspx

Socket类xxxAsync的方法,使用起来比较复杂,需要时间消化上述的例子,结合实际编写所需的操作。

web服务器编程过程中。需要使用异步技术。使用异步的地方:

1、监听socket,需要等待客户端接入。这是需要一个线程专门负责监听(accept方法)

2、一旦客户端连接,通信socket需要线程监听缓冲区,以便与客户端通信。包括接收和发送。

写些自己的理解。

1、利用socket类中提供的异步方法:AcceptAsync。创建监听方法

这个方法需要在回调函数中重复调用,以保证监听。

        private void StartAccept(SocketAsyncEventArgs acceptEventArg)
        {
            if (acceptEventArg == null)  //初始化用
            {
                acceptEventArg = new SocketAsyncEventArgs();
                acceptEventArg.Completed += new EventHandler<SocketAsyncEventArgs>(OnAcceptCompleted); //回调函数 实例化
            }
            else  //循环调用时 需要清理对象。将AcceptSocket属性设置为null。等待新连接的接入
            {
                acceptEventArg.AcceptSocket = null;
            }
            bool bl = this.listenSocket.AcceptAsync(acceptEventArg); //该异步方法 每次只能接收一个连接。需要循环调用

            if (!bl)
            {
                this.ProcessAccept(acceptEventArg);
            }
        }

回调函数(有格式哦)这个e变量包含了好多的东东哦。

        private void OnAcceptCompleted(object sender, SocketAsyncEventArgs e)
        {
            Console.WriteLine("有一个客户端连接上来了");
            StartAccept(e);  //非常重要,循环调用该方法。实现监听
        }

2、在回调函数中。利用socket类提供的异步方法:ReceiveAsync和SendAsync。异步接收和发送数据

  

时间: 2024-10-09 21:11:27

c# SocketAsyncEventArgs类使用的相关文章

C#高性能Socket服务器SocketAsyncEventArgs的实现(IOCP)

原创性申明 本文作者:小竹zz  博客地址:http://blog.csdn.net/zhujunxxxxx/article/details/43573879转载请注明出处 引言 我一直在探寻一个高性能的Socket客户端代码.以前,我使用Socket类写了一些基于传统异步编程模型的代码(BeginSend.BeginReceive,等等)也看过很多博客的知识,在linux中有poll和epoll来实现,在windows下面 微软MSDN中也提供了SocketAsyncEventArgs这个类来

Socket 异步

摘要: System.Net.Sockets.Sockte 类有一组增强功能,提供可供专用的高性能套接字应用程序使用的可选异步模式,SocketAsyncEventArgs 类就是这一组增强功能的一部分. 该类专为需要高性能的网络服务器应用程序而设计. 应用程序可以完全使用增强的异步模式,也可以仅仅在目标热点区域(例如,在接收大量数据时)使用此模式. 这些增强功能的主要特点是可以避免在异步套接字 I/O 量非常大时发生重复的对象分配和同步. 在新的 System.Net.Sockets.Sock

C# IOCP完成端口模型(简单实用高效)

1.在C#中,不用去面对完成端口的操作系统内核对象,Microsoft已经为我们提供了SocketAsyncEventArgs类,它封装了IOCP的使用.请参考:http://msdn.microsoft.com/zh-cn/library/system.net.sockets.socketasynceventargs.aspx?cs-save-lang=1&cs-lang=cpp#code-snippet-1. 2.我的SocketAsyncEventArgsPool类使用List对象来存储对

SuperSocket1.6Code解析

SuperSocket1.6Code解析 Normal Socket System.Net.Sockets.dll程序集中使用socket类: 服务器: 创建socket:_socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); 创建IP:IPAddress _ip = IPAddress.Parse(ip);_endPoint = new IPEndPoint(_ip, port

谈一款MOBA类游戏《码神联盟》的服务端架构设计与实现

一.前言 <码神联盟>是一款为技术人做的开源情怀游戏,每一种编程语言都是一位英雄.客户端和服务端均使用C#开发,客户端使用Unity3D引擎,数据库使用MySQL.这个MOBA类游戏是笔者在学习时期和客户端美术策划的小伙伴一起做的游戏,笔者主要负责游戏服务端开发,客户端也参与了一部分,同时也是这个项目的发起和负责人.这次主要分享这款游戏的服务端相关的设计与实现,从整体的架构设计,到服务器网络通信底层的搭建,通信协议.模型定制,再到游戏逻辑的分层架构实现.同时这篇博客也沉淀了笔者在游戏公司实践五

【转】C#高性能大容量SOCKET并发(二):SocketAsyncEventArgs封装

http://blog.csdn.net/sqldebug_fan/article/details/17557341 1.SocketAsyncEventArgs介绍 SocketAsyncEventArgs是微软提供的高性能异步Socket实现类,主要为高性能网络服务器应用程序而设计,主要是为了避免在在异步套接字 I/O 量非常大时发生重复的对象分配和同步.使用此类执行异步套接字操作的模式包含以下步骤:1.分配一个新的 SocketAsyncEventArgs 上下文对象,或者从应用程序池中获

C#高性能大容量SOCKET并发(二):SocketAsyncEventArgs封装

1.SocketAsyncEventArgs介绍 SocketAsyncEventArgs是微软提供的高性能异步Socket实现类,主要为高性能网络服务器应用程序而设计,主要是为了避免在在异步套接字 I/O 量非常大时发生重复的对象分配和同步.使用此类执行异步套接字操作的模式包含以下步骤:1.分配一个新的 SocketAsyncEventArgs 上下文对象,或者从应用程序池中获取一个空闲的此类对象.2.将该上下文对象的属性设置为要执行的操作(例如,完成回调方法.数据缓冲区.缓冲区偏移量以及要传

SocketAsyncEventArgs

SocketAsyncEventArgs是.net提供的关于异步socket类,封装了IOCP的使用,可以用它方便的实现NIO(non-blocking IO) NIO对于提升某些场景下Server性能和吞吐量有很大益处,准备在服务框架中使用它来编写简易rpc的部分 不过例子还是感觉复杂了点,我只是需要知道SocketAsyncEventArgs本身如何使用而已,于是自行简化了一下: 1: using System; 2: using System.Net; 3: using System.Ne

SocketAsyncEventArgs简单通讯

SocketAsyncEventArgs是一个套接字操作的类,主要作用是实现socket消息的异步接收和发送,跟Socket的BeginSend和 BeginReceive方法异步处理没有多大区别,它的优势在于完成端口的实现来处理大数据的并发情况,由于本人学习不久,对千万级的 数据访问还没有多大体会,这里的简单实现作为一个学习的笔记,请酌情参考,如有错误,请及时指正. 先说说SockeAsyncEventArgs类的操作方法,以下是摘自MSDN的内容(cn/library/system.net.