• c# SocketAsyncEventArgs类的使用 IOCP服务器


    要编写高性能的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。异步接收和发送数据

      

  • 相关阅读:
    2.7连接数据库中遇见的相应问题1
    linux bash中too many arguments问题的解决方法
    linux系统补丁更新 yum命令
    安装node,linux升级gcc
    python-导出Jenkins任务
    升级openssl和openssh版本
    linux修改文件所属的用户组以及用户
    linux的Umask 为022 和027 都是什么意思?
    keepalived
    自己编写k8s
  • 原文地址:https://www.cnblogs.com/crhdyl/p/4921882.html
Copyright © 2020-2023  润新知