@Override public void filterClose(final NextFilter nextFilter, final IoSession session) throws SSLException { SslHandler handler = (SslHandler) session.getAttribute(SSL_HANDLER); if (handler == null) { // The connection might already have closed, or // SSL might have not started yet. nextFilter.filterClose(session); return; } WriteFuture future = null; try { synchronized (handler) { if (isSslStarted(session)) { future = initiateClosure(nextFilter, session); future.addListener( new IoFutureListener<IoFuture>() { public void operationComplete(IoFuture future) { nextFilter.filterClose(session); } }); } } handler.flushScheduledEvents(); } finally { if (future == null) { nextFilter.filterClose(session); } } }
@SuppressWarnings("rawtypes") private void sendErrorResponse(final IoSession session, final RequestWrapper request) { ResponseWrapper responseWrapper = new ResponseWrapper(request.getId(), request.getCodecType(), request.getProtocolType()); responseWrapper.setException( new Exception("server threadpool full,maybe because server is slow or too many requests")); WriteFuture wf = session.write(responseWrapper); wf.addListener( new IoFutureListener() { public void operationComplete(IoFuture future) { if (!((WriteFuture) future).isWritten()) { LOGGER.error("server write response error,request id is: " + request.getId()); } } }); }
@SuppressWarnings("rawtypes") public void run() { // pipeline if (message instanceof List) { List messages = (List) message; for (Object messageObject : messages) { threadPool.execute(new HandlerRunnable(session, messageObject, threadPool)); } } else { RequestWrapper request = (RequestWrapper) message; long beginTime = System.currentTimeMillis(); ResponseWrapper responseWrapper = ProtocolFactory.getServerHandler(request.getProtocolType()).handleRequest(request); final int id = request.getId(); // already timeout,so not return if ((System.currentTimeMillis() - beginTime) >= request.getTimeout()) { LOGGER.warn( "timeout,so give up send response to client,requestId is:" + id + ",client is:" + session.getRemoteAddress() + ",consumetime is:" + (System.currentTimeMillis() - beginTime) + ",timeout is:" + request.getTimeout()); return; } WriteFuture wf = session.write(responseWrapper); wf.addListener( new IoFutureListener() { public void operationComplete(IoFuture future) { if (!((WriteFuture) future).isWritten()) { LOGGER.error("server write response error,request id is: " + id); } } }); } }