gpt4 book ai didi

java - Netty:为什么不同的数据包在服务器中作为请求连接在一起?

转载 作者:行者123 更新时间:2023-12-02 03:03:11 26 4
gpt4 key购买 nike

这是 Netty 客户端中唯一的处理程序,我向服务器发送了 3 个数据包。

@Sharable
public class ClientHandler extends ChannelInboundHandlerAdapter {
@Override
public void channelActive(ChannelHandlerContext ctx) {
ctx.writeAndFlush(Unpooled.copiedBuffer("1", CharsetUtil.UTF_8));
ctx.writeAndFlush(Unpooled.copiedBuffer("2", CharsetUtil.UTF_8));
ctx.writeAndFlush(Unpooled.copiedBuffer("3", CharsetUtil.UTF_8))
.addListener(ChannelFutureListener.CLOSE);
}
}

在服务器处理程序中,我只是打印它,预计打印 3 次,并带有单独的 1 , 23 ,但是123实际上。发生了什么?它们不是不同的数据包吗?

@Sharable
public class ServerHandler extends SimpleChannelInboundHandler<ByteBuf> {
@Override
public void channelRead0(ChannelHandlerContext ctx, ByteBuf in) {
System.out.println(in.toString(CharsetUtil.UTF_8));
}
}

最佳答案

TCP/IP 协议(protocol)(​​您可能在服务器中使用)是基于流的。这意味着基于流的传输的缓冲区不是数据包队列,而​​是字节队列。因此,操作系统如何发送数据 - 作为单独的数据包或作为包含所有数据的 1 个数据包发送。

您有 3 个选项,要么添加一些分隔符,要么发送固定长度的数据包,要么将数据包大小附加到消息中。

Here is更多详细信息请参见 netty 文档。

关于java - Netty:为什么不同的数据包在服务器中作为请求连接在一起?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42163932/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com