zoukankan      html  css  js  c++  java
  • SOCKET缓存

    SOCKET缓存

    /// <author>cxg 2020-7-13</author>
    /// socket缓存(线程安全)
    
    unit sockBuf;
    
    interface
    
    uses
      System.SyncObjs, Net.SocketAPI, Net.CrossSocket.Base, Net.CrossSocket,
      System.Generics.Collections, System.Classes, System.SysUtils;
    
    const
      bufsize = 32768; //32K
    
    type
      TSockBuf = class
      private
        bufs: TDictionary<ICrossConnection, TMemoryStream>; 
        fCS: TCriticalSection;
      public
        constructor Create;
        destructor Destroy; override;
        function process(const Connection: ICrossConnection; const Buf: Pointer; const Len: Integer): TMemoryStream;
        procedure remove(const Connection: ICrossConnection);
      end;
    
    implementation
    
    { TSockBuf }
    
    constructor TSockBuf.Create;
    begin
      bufs := TDictionary<ICrossConnection, TMemoryStream>.Create;
      fCS := TCriticalSection.Create;
    end;
    
    destructor TSockBuf.Destroy;
    begin
      for var v: TMemoryStream in bufs.Values do
        v.Free;
      FreeAndNil(bufs);
      FreeAndNil(fCS);
      inherited;
    end;
    
    function TSockBuf.process(const Connection: ICrossConnection; const Buf: Pointer; const Len: Integer): TMemoryStream;
    begin
      fCS.Enter;
      if not bufs.ContainsKey(Connection) then  
      begin
        Result := TMemoryStream.Create;
        bufs.Add(Connection, Result);
      end
      else     
        bufs.TryGetValue(Connection, Result);
      fCS.Leave;
      Result.Write(Buf^, Len);
    end;
    
    procedure TSockBuf.remove(const Connection: ICrossConnection);
    begin
      fCS.Enter;
      bufs[Connection].Free;
      bufs.Remove(Connection);
      fCS.Leave;
    end;
    
    end.
    

      

  • 相关阅读:
    递归
    数组[]
    AngularJs学习总结-了解基本特性(-)
    终于落脚了!
    总结一下面试中的知识点
    bootstrap学习总结-js组件(四)
    spark学习进度3:Scala中变量,常量,数据类型,运算符,表达式,循环,方法,函数的基本使用
    spark学习进度2
    spark学习进度1
    后台得到jsp提交name属性相同的内容
  • 原文地址:https://www.cnblogs.com/hnxxcxg/p/13296359.html
Copyright © 2011-2022 走看看