/// <summary> /// Initializes the server by preallocating reusable buffers and context objects. These objects do not /// need to be preallocated or reused, by is done this way to illustrate how the API can easily be used /// to create reusable objects to increase server performance. /// </summary> public void Init() { // Allocates one large byte buffer which all I/O operations use a piece of. This gaurds // against memory fragmentation m_bufferManager.InitBuffer(); // preallocate pool of SocketAsyncEventArgs objects SocketAsyncEventArgs readWriteEventArg; AsyncUserToken asyncUserToken; HttpProtocolParser httpParser; m_numConnectedSockets = 0; for (int i = 0; i < m_numConnections; i++) { //Pre-allocate a set of reusable SocketAsyncEventArgs readWriteEventArg = new SocketAsyncEventArgs(); httpParser = new HttpProtocolParser(); asyncUserToken = new AsyncUserToken(); asyncUserToken.HttpParser = httpParser; readWriteEventArg.Completed += new EventHandler <SocketAsyncEventArgs>(IO_Completed); readWriteEventArg.UserToken = asyncUserToken; // assign a byte buffer from the buffer pool to the SocketAsyncEventArg object m_bufferManager.SetBuffer(readWriteEventArg); // add SocketAsyncEventArg to the pool m_readWritePool.Push(readWriteEventArg); } }
public AsyncUserToken(Socket socket, HttpProtocolParser httpParser) { m_socket = socket; m_parser = httpParser; }