zoukankan      html  css  js  c++  java
  • 理解NetworkSocket之SockAsync<TDataEvenArgs>

    前言

    前面给出了几个例子如何使用NetworkSocket构建服务和客户端,但没有详细说明过NetworkSocket里的设计思路,以及几个重要对象的说明,本节将解说NetworkSocket里的最基础最重要的SocketAsync<TDataEventArgs>类。

    类图

    设计思路

    性能:服务器一个重要的参考点就是拼性能,SocketAsync也使用了SocketAsyncEventArgs对象作发送和接收数据,为了防止缓冲区内存碎片化,我们需要把该对象的缓冲区统一放到一块连续的内存区域,对应上图的SocketAsncBufferManage,

    方便:SocketAsync的目标是,给我一个Socket,我就可以控制它让它发送和接收数据,发送数据的方法是Send(byte[] buffer),接收到数据通知上层调用者是OnRecvComplete事件,该事件的第一个参数sender是SocketAsync<TDataEventArgs>类型。

    灵活:SocketAsync不依赖于具体的封包方法(协议),将变化的协议通过TDataEventArgs做为泛型参娄传进来,提供protected virtual TDataEventArgs AnalysisRecvData(ByteBuilder recvBuilder)方法,给派生类重写解析数据;同时提供internal Func<ByteBuilder, TDataEventArgs> AnalysisRecvDataHandler { get; set; }的委托, 可以让调用者可以把解析方法赋值给它,在设计TcpServerBase<TDataEventArgs>对象时,我们就需要到这个委托。

    细节提示

    SocketAsyncEventArgs在发送数据时比较难以驾驭,在发送未完成时,如果继续调用它,则引发异常,在实现SocketAsync时,如果发送的数据大于发送缓冲区,需要把数据拆开,发送第一小包完之后,才可以发送第二个小包,依此类推。

  • 相关阅读:
    POJMatrix(二维树状数组)
    HD1556Color the ball(树状数组)
    闲的没事,自挂东南枝
    高端、洋气效果
    “绝对”妹纸~position
    float元素一定要闭合
    dw cs6激活码一枚
    shell 预定义变量
    ubuntu 安装docker
    Microsonf visual c++ 14+ 离线内网安装
  • 原文地址:https://www.cnblogs.com/kewei/p/3020415.html
Copyright © 2011-2022 走看看