第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

根據(jù)輸入消息將結(jié)果作為 StringEncoder 或 ObjectEncoder 發(fā)送到客戶端?

根據(jù)輸入消息將結(jié)果作為 StringEncoder 或 ObjectEncoder 發(fā)送到客戶端?

滄海一幻覺(jué) 2021-12-01 19:57:34
我是 Netty 的新手,到目前為止,有一個(gè)可以使用 StringEncoder 和 StringDecoder 處理字符串消息的工作客戶端服務(wù)器,例如:        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和服務(wù)器發(fā)回:ok。現(xiàn)在,我需要做的是服務(wù)器收到一條新的文本消息:get_object,它應(yīng)該將序列化對(duì)象作為字節(jié)數(shù)組發(fā)送回任何客戶端(例如:telnet 或使用普通套接字的 java 應(yīng)用程序)。然后在這個(gè)客戶端中,它可以將這個(gè)對(duì)象反序列化為 Java 對(duì)象。我知道ObjectEncoder()似乎是這樣做的方法。但是,它還將應(yīng)該是字符串的響應(yīng)序列化為序列化對(duì)象,而它應(yīng)該為某些特定消息(例如:僅get_object)執(zhí)行此操作。我怎么能告訴 Netty 什么時(shí)候應(yīng)該將結(jié)果編碼為 StringEncoder,什么時(shí)候應(yīng)該將序列化對(duì)象編碼為字節(jié)數(shù)組?
查看完整描述

2 回答

?
慕娘9325324

TA貢獻(xiàn)1783條經(jīng)驗(yàn) 獲得超4個(gè)贊

可以動(dòng)態(tài)修改管道。當(dāng)您收到get_object消息時(shí),您可以簡(jiǎn)單地刪除StringEncoder并ObjectEncoder在相關(guān)的ChannelInboundHandler


   ChannelPipeline p = ctx.pipeline();

    if (p.get(StringEncoder.class) != null) {

        p.remove(StringEncoder.class);

    }

    p.addLast(new YourObjectEncoder())

或者,如果您知道編碼器的名稱,則可以進(jìn)行替換:


p.replace("encoder", "encoder", new YourObjectEncoder());


查看完整回答
反對(duì) 回復(fù) 2021-12-01
?
阿波羅的戰(zhàn)車

TA貢獻(xiàn)1862條經(jīng)驗(yàn) 獲得超6個(gè)贊

當(dāng)服務(wù)器收到消息并將響應(yīng)寫(xiě)入客戶端時(shí),它可以像這段代碼一樣動(dòng)態(tài)切換編碼器。


@Override

protected void channelRead0(ChannelHandlerContext ctx, String message) throws Exception {

    InetSocketAddress address = (InetSocketAddress) ctx.channel().remoteAddress();

    MessageContainer messageContainer = new MessageContainer(message, address);

    log.debug("\n");

    log.debug("Message received: {}", message);


    // Handle received message and write result back to the sender

    Object response = this.handleMessage(messageContainer);

    if (response instanceof String) {

        ctx.channel().pipeline().names();

        ctx.channel().pipeline().remove(ObjectEncoder.class);

        ctx.channel().pipeline().addFirst(new StringEncoder());

    }


    if (response != null) {

        ctx.write(response);

        ctx.flush();

    }

    ctx.close();

}


查看完整回答
反對(duì) 回復(fù) 2021-12-01
  • 2 回答
  • 0 關(guān)注
  • 233 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)