23 Mayıs 2018 Çarşamba

Netty Encoders

Giriş
Açıklaması şöyle.
To convert a String use a StringEncoder To convert a Serializable use a ObjectEncoder(warning, not compatible with normal Java object streams) To convert a byte[] use a ByteArrayEncoder
MessageToByteEncoder Sınıfı
Giriş
Şu satırı dahil ederiz.
import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelHandlerContext;
import io.netty.handler.codec.MessageToByteEncoder;
Nesneyi serialize etmek için kullanılır. Bu sınıfın tersini ByteToMessageDecoder sınıfı yapar.
encode metodu
Örnek
Şöyle yaparız.
public class ChatEncoder extends MessageToByteEncoder {

  @Override
  protected void encode(ChannelHandlerContext chc, Object msg, ByteBuf out)
  throws Exception {
    out.writeInt(2);
    ...
  }
}
Örnek
Şöyle yaparız.
public class ResponseEncoder extends MessageToByteEncoder<RpcResponse> {
  
  @Override
  protected void encode(ChannelHandlerContext channelHandlerContext,
    RpcResponse rpcResponse, ByteBuf byteBuf) throws Exception {
     byte[] bytes = mapper.writeValueAsBytes(rpcResponse);
     int dataLength = bytes.length;
     byteBuf.writeInt(dataLength);
     byteBuf.writeBytes(bytes);
     byteBuf.writeBytes(SerializationUtil.serialize(rpcResponse));

  }
}
DefaultFullHttpRequest Sınıfı
constructor
Şöyle yaparız
HttpRequest req = new DefaultFullHttpRequest(HttpVersion.HTTP_1_1, HttpMethod.GET, "/");
HttpUtil.set100ContinueExpected(req, true);
EmbeddedChannel channel = ...;

channel.writeInbound(request);
retainedDuplicate metodu
Şöyle yaparız.
DefaultFullHttpRequest postRequest = ...;

Channel ch = ...;

ch.writeAndFlush(postRequest.retainedDuplicate());
DefaultFullHttpResponse Sınıfı
Giriş
Şu satırı dahil ederiz
import io.netty.handler.codec.http.DefaultFullHttpResponse;
constructor
Şöyle yaparız.
FullHttpResponse response = new DefaultFullHttpResponse(
  HttpVersion.HTTP_1_1, HttpResponseStatus.OK, buf);
DefaultHttpResponse Sınıfı
Giriş
Şu satırı dahil ederiz
import io.netty.handler.codec.http.DefaultHttpResponse;
constructor
Şöyle yaparız.
HttpResponse res = new DefaultHttpResponse(HttpVersion.HTTP_1_1, HttpResponseStatus.OK);
HttpResponse Arayüzü
Giriş
Şu satırı dahil ederiz.
import io.netty.handler.codec.http.HttpResponse;
headers metodu
Şöyle yaparız.
@Override
public void write(ChannelHandlerContext ctx, Object msg, ChannelPromise promise)
throws Exception {
  if (msg instanceof HttpResponse) {
    ((HttpResponse) msg).headers().set("some-header", "some-header-value");
  }

  super.write(ctx, msg, promise);
}

LengthFieldPrepender Sınıfı
constructor
Şöyle yaparız.
pipeline.addLast(new LengthFieldPrepender(2));
ObjectEncoder Sınıfı
constructor
Şöyle yaparız.
pipeline.addLast(new ObjectEncoder());
StringEncoder Sınıfı
constructor
Şöyle yaparız.
ch.addLast(new StringEncoder());


Hiç yorum yok:

Yorum Gönder