我正在尝试使用Netty迈出第一步,为此目的,我在Netty上编写了简单的服务器,在oio纯TCP上编写了简单的客户端。
客户端发送随机文本数据包,并且必须接收“ Ack”消息。请参阅处理程序方法:
@Override
public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
ctx.write("Ack");
ctx.flush();
ByteBuf in = (ByteBuf) msg;
StringBuilder sb = new StringBuilder();
try {
while (in.isReadable()) {
sb.append((char) in.readByte());
}
} finally {
ReferenceCountUtil.release(msg);
}
LOG.debug("Incoming message. ACK was send");
String myaddr = ctx.channel().remoteAddress().toString();
String message = "Message from " + myaddr + " :" + sb.toString();
LOG.debug(message);
sendToOther(myaddr, message);
}
问题是-当我尝试发送回“ Ack”字符串时-客户端什么也没收到。但是,当我尝试发送回来的消息时,它工作正常,并且我在客户端看到回显。
@Override
public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
ctx.write(msg);
ctx.flush();
write()
方法需要Object
,我尝试发送(Object) String
-但没有任何反应。我也尝试发送ByteBuf
(我在一篇文章中看到了),但仍然无法正常工作。
当我将回送的邮件作为回音发送时-它起作用。当我发送其他内容时-不会。请帮助我,我只是不知道我的错误在哪里。
我解决了这个问题。问题是,您ByteBuff
只需要发送。因此,我们需要创建它,并向其中写入内容,然后才能将其写入香奈儿管道。就我而言:
String ack = "ACK";
ByteBuf out = ctx.alloc().buffer(ack.length()*2);
out.writeBytes(ack.getBytes());
ctx.write(out);
ctx.flush();
LOG.debug("Incoming message. ACK was send");
可能这不是很好的解决方案,但它可以作为示例。
您将看到为什么如果更换您的打印机失败
ctx.write("Ack");
ctx.flush();
在您的serverHandler中具有以下内容:
ChannelFuture cf = ctx.write("Ack");
ctx.flush();
if (!cf.isSuccess()) {
System.out.println("Send failed: " + cf.cause());
}
它应该给您一条消息,String
说不支持。
ByteBuf
应该可以工作:
ctx.write(Unpooled.copiedBuffer("Ack", CharsetUtil.UTF_8));
ctx.flush();
在客户端上,编辑channelRead方法:
ByteBuf in = (ByteBuf) msg;
System.out.println("Client received: " + in.toString(CharsetUtil.UTF_8));
主要内容:一、背景引入,二、前情回顾,三、目前已有的技术方案,四、数据100%不丢失了吗?,五、按需制定技术方案,六、需要研究的技术细节一、背景引入 这篇文章,我们来聊聊在线上生产环境使用消息中间件技术的时候,从前到后的全链路到底如何保证数据不能丢失。 这个问题,在互联网公司面试的时候高频出现,而且也是非常现实的生产环境问题。 如果你的简历中写了自己熟悉MQ技术(RabbitMQ、RocketMQ、Kafka),而且在项目里有使用的经验,那么非常实际的一个生产环境问题就是:投递消息到MQ,然后从
我在我的项目中使用log4j。我想有标准输出、调试记录器和最终报告记录器。调试记录器几乎写调试/信息级别的消息。报告将是不同的记录器,只写信息消息。我尝试了不同的方法,阅读了很多示例,我仍然无法解决这个问题。要么我丢失了我的标准输出,要么我将所有调试写入两个记录器。 我的密码在这里 } 任何提示都将不胜感激
我试着写一些关于主题的消息,但是控制台不允许(生产者不等待标准输入)。我也看不到任何错误日志。尽管主题已成功创建。我正在使用: 动物园管理员和Kafka服务器运行良好。我使用的是苹果电脑。可能的问题是什么。我正在关注阿帕奇Kafka文档 http://kafka.apache.org/documentation.html#quickstart。
在我的客户端服务器应用程序中,我发现了一个奇怪的错误。我得到了以下方法: 每个方法向客户端发送一个字节数组 如果我只调用其中的2个,一切都正常,客户端会得到所有发送的字节数组。但是如果我调用所有3个,只有第一个和第二个到达客户端,以下方法的顺序并不重要。但是服务器说它们都是发送的。使用方法向客户端iam写入包中的所有长度也是有意义的。奇怪的一点来了: 如果我添加一个
我在使用者组中轮询来自 Kafka 的消息时遇到问题。我的使用者对象分配给给定的分区 之后,消费者向该分区分配: 之后,我可以计算分区内的消息 和 ..... 在我的主题中有超过30000条消息。问题是我只收到一条消息。 具有< code > max _ poll _ records = 200 < code > AUTO _ OFFSET _ RESET 的消费者配置是最早的 这是我的函数,我正
我试图覆盖默认的Hibernate验证器消息,但没有成功。我已经为几个文本使用了一个资源包,它工作得很好。问题在于验证器的消息。 详细内容: 我创建了以下文件:ValidationMessages\u de.properties并将其放置在\src\main\resources\translations\ValidationMessages\u de.properties下。该文件具有以下资源:o