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时,如果发送的数据大于发送缓冲区,需要把数据拆开,发送第一小包完之后,才可以发送第二个小包,依此类推。

  • 相关阅读:
    基于WINCE嵌入式系统的FM1702的读写器(2)
    WINCE 按键驱动编写
    WinCE内存调整
    USB模块
    网络模块
    wince6.0下ov9650的图像保存
    Windows CE内存泄漏
    MPEG4解码函数
    centos 7 gitlab安装 李刚
    docker 17.12.0ce 空间大小和容器大小限制修改 李刚
  • 原文地址:https://www.cnblogs.com/kewei/p/3020415.html
Copyright © 2011-2022 走看看