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.
本文来自博客园,作者:{咏南中间件},转载请注明原文链接:https://www.cnblogs.com/hnxxcxg/p/13296359.html