0
我注意到在Netty 4.0.0 alpha版本中,HTTP響應對象有一個方法來測試分塊(isChunked())。在3.5.7.Final版本中,只有請求對象有一個方法來測試分塊。使用3.5.7.Final我怎樣才能閱讀大塊的迴應?下面的代碼用於4.0.0 alpha測試:Netty,如何閱讀chunked HTTP響應而不使用4.0.0 alpha版本之一?
@Override
public void messageReceived(ChannelHandlerContext context, MessageEvent event) throws Exception {
try {
log.trace("Message received");
if (newMessage) {
log.trace("New message");
HttpResponse response = (HttpResponse) event.getMessage();
log.trace("STATUS: [{}], VERSION [{}]", response.getStatus(), response.getProtocolVersion());
if (!response.getHeaderNames().isEmpty()) {
for (String name: response.getHeaderNames()) {
for (String value: response.getHeaders(name)) {
log.trace("HEADER: [{}] = [{}]", name, value);
}
}
}
newMessage = false;
if (response.isChunked()) {
requestContentStream = new ByteArrayOutputStream();
readingChunks = true;
log.trace("CHUNKED CONTENT {");
return;
} else {
log.trace("Request not chunked");
writeNonChunkedData(response);
responseComplete(event);
return;
}
} else if (readingChunks) {
log.trace("Reading chunks");
HttpChunk chunk = (HttpChunk) event.getMessage();
if (chunk.isLast()) {
log.trace("Read last chunk");
readingChunks = false;
writeChunkedData();
responseComplete(event);
return;
} else {
log.trace("Buffering chunk content to byte buffer");
requestContentStream.write(chunk.getContent().array());
return;
}
} else {
log.error("Error handling of MessageEvent, expecting a new message or a chunk from a previous message");
//setError(context, INTERNAL_SERVER_ERROR);
super.messageReceived(context, event);
}
}catch (Exception ex) {
log.error("Exception: [{}]", ex);
//setError(context, INTERNAL_SERVER_ERROR);
super.messageReceived(context, event);
}
}
抱歉,我的IDE沒有使用正確的javadoc。一切都很好 – Hoofamon