/// <summary> /// 构造方法 /// </summary> /// <param name="socketServerParameter"></param> public SocketServer(SocketServerParameter socketServerParameter) { this.socketServerParameter = socketServerParameter; /* * 1、初始化数据缓冲区 * 2、初始化接收请求对象池 * 3、初始化接收发送数据对象池 * 4、初始化最大连接数量控制单元 * 5、初始化接收请求Socket对象 */ //1. this.bufferManager = new BufferManager(socketServerParameter); //2. this.acceptPool = new SocketAsyncEventArgsPool(socketServerParameter.AccptPoolSize); for (int i = 0; i < socketServerParameter.AccptPoolSize; i++) { this.acceptPool.Push(CreateAcceptSocketAsyncEventArgs()); } //3. this.receiveSendPool = new SocketAsyncEventArgsPool(socketServerParameter.MaxConnectionCount); for (int i = 0; i < socketServerParameter.MaxConnectionCount; i++) { this.receiveSendPool.Push(CreateReceiveSendSocketAsyncEventArgs()); } //4. this.semaphore = new Semaphore(socketServerParameter.MaxConnectionCount, socketServerParameter.MaxConnectionCount); //5. socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); socket.Bind(socketServerParameter.EndPoint); socket.Listen(socketServerParameter.Backlog); }
/// <summary> /// 构造方法 /// </summary> /// <param name="socketServerParameter"></param> public BufferManager(SocketServerParameter socketServerParameter) { this.maxConnectionCount = socketServerParameter.MaxConnectionCount; this.singletonBufferSize = socketServerParameter.SingletonBufferSize; this.buffer = new byte[maxConnectionCount * singletonBufferSize]; this.bufferOffset = 0; }
/// <summary> /// 构造方法 /// </summary> /// <param name="socketServerParameter"></param> public DataHolder(SocketServerParameter socketServerParameter) { this.receiveMessageLength = socketServerParameter.ReceiveMessageLength; this.sendMessageLength = socketServerParameter.SendMessageLength; this.singleBufferSize = socketServerParameter.SingletonBufferSize; this.receiveBuffer = new byte[receiveMessageLength]; this.sendBuffer = new byte[sendMessageLength]; this.Reset(); }