Я новичок в Netty, и до сих пор существует работающий клиент-сервер, который может обрабатывать String-сообщение с помощью StringEncoder и StringDecoder, например:
ServerBootstrap serverBootstrap = new ServerBootstrap();
serverBootstrap.group(bossGroup, workerGroup)
.channel(NioServerSocketChannel.class)
.handler(new LoggingHandler(LogLevel.TRACE))
.childHandler(new ChannelInitializer<SocketChannel>() {
@Override
public void initChannel(SocketChannel ch) throws Exception {
ch.pipeline().addLast(
new LoggingHandler(LogLevel.TRACE),
new DelimiterBasedFrameDecoder(Integer.MAX_VALUE, Delimiters.lineDelimiter()),
new StringEncoder(),
new StringDecoder(),
new ReceiveMessageCommunicatorHandler(localNode, inpeerNodeRegistry, outpeerNodeRegistry));
Входное сообщение выглядит так: excute_this и сервер отправляет обратно: ok .
Теперь мне нужно, чтобы сервер получил новое текстовое сообщение: get_object , он долженотправьте обратно любому клиенту (например, telnet или Java-приложение, которое использует простой сокет) сериализованный объект в виде байтового массива.Затем в этом клиенте он может десериализовать этот объект как объект Java.
Я знал, что ObjectEncoder () , кажется, способ сделать это.Но он также сериализует ответ, который должен быть String, для сериализованного объекта, в то время как он должен делать это для некоторых конкретных сообщений (например: get_object * только 1017 *).
Как я могу сказать Netty, когда ондолжен кодировать результат как StringEncoder и когда следует кодировать как Serialized Object как байтовый массив?