thomescai http://blog.csdn.net/thomescai(转载请保留)
概要:本文主要讲解response的传递和编码。
request流程:
request的解码在HttpRequestDecoder的decode()中详见:《AsyncWeb原理分析(五)——request的封装》
response流程:
request过程中,Filter间通过messageReceived()进行传递。
@Override
public void messageReceived( final NextFilter nextFilter,
final IoSession session, final Object message ) throws Exception
reponse过程中,Filter间通过filterWrite()进行传递,传递对象通过writeRequest.getMessage()获取。注意,
传递递顺序和request的相反。
@Override
public void filterWrite( final NextFilter nextFilter, final IoSession session, final WriteRequest writeRequest )
throws Exception
最终在
HttpResponseEncoder 中的encode()进行解析:
public class HttpResponseEncoder implements ProtocolEncoder {
public void encode(IoSession session, Object message,
ProtocolEncoderOutput out) throws Exception {
asciiEncoder.reset();
HttpResponse response = (HttpResponse) message;
IoBuffer buffer = IoBuffer.allocate(512);
buffer.setAutoExpand(true);
encodeStatusLine(response, buffer);
HttpCodecUtils.encodeHeaders(response, buffer, asciiEncoder);
HttpCodecUtils.encodeBody(response, buffer);
buffer.flip();
out.write(buffer);
}
总结:到此,asyncweb的整体流程可以算通了。