我是Netty的新手,需要以自定义方式处理消息。我有以下接口:
public interface Command{ }
public interface CommandFactory{
Command(byte b)
}
public interface CommandProcessor{
void process(Command c, Object arg)
}
现在我从客户端收到一些数据,并希望对其进行处理。我正在实现ReplayingDecoder
public class CommandDecoder extends ReplayingDecoder<Void>{
private CommandFactory cmf;
private CommandProcessor cmp;
void decode(ChannelHandlerContext ctx, ByteBuf in, List<AnyRef> out){
Command command = cmf.command (
in.readByte()
);
String arg = new String (
in.readBytes (
in.readShort()
).array()
);
cmp.process(command, arg); //<------------ Here
}
}
问题是我不确定。我在解码器中处理命令。至少可以说看起来很奇怪。也许我应该通过解码的
通信
和arg
进一步到通道管道
。
但是,要选择哪个
ChannelInundHandler
用于命令处理?
你是对的。最好将解码器和实际业务逻辑分离,以便进行命令处理。在这种情况下,最好的处理程序是SimpleChannelInboundHandler
。通常,它只接受特定类型的消息。
可能是这样的:
public class MyCommandHandler extends SimpleChannelInboundHandler<Command> {
@Override
protected void channelRead0(ChannelHandlerContext ctx, Command command) throws Exception {
//process here your message
//command.type;
//command.args
}
}
因此,在您解码命令之后:
Command command = cmf.command (
in.readByte(),
new String (in.readBytes (in.readShort()).array())
);
您可以通过以下方式将其传递到管道中的下一个MyCommandHandler
:
out.add(command);
我正在使用netty构建一个应用程序。在应用程序中,我需要处理传入和传出的消息。要求是应用程序将发送的任何消息都应由特定的处理程序处理,进入应用程序的任何消息都应由另一个特定的处理程序处理。但是,我希望在两个处理程序之间交换消息,以便能够跟踪发送的消息响应,因为请求消息也将发送到应用程序。 请任何想法hwo实施这样的要求。这个问题听起来可能不相关,但这就是我得到的,我还不是一个网络极客。我读到的关
我有一个Netty4.x应用程序,它需要发送和接收ASCII消息,从一个固定长度(10位数,零填充)字段开始,包含以#字符为单位的消息大小。消息如下:
我刚刚开始学习Netty,想慢慢来真正理解它是如何工作的。我有一个基于独立套接字测试程序的初始用例: 从客户端连接到服务器时,立即发送消息并处理响应 很简单...或者我是这么想的。我已经看了好几天了,不太明白为什么它的表现不如预期。 这是最初的测试程序,它再次简单地连接到远程服务器,并立即向服务器写入字节缓冲区。然后服务器立即发送一个ack响应,该响应被写入控制台。 我用Netty做了同样的测试,
问题内容: 我正在尝试使用Netty迈出第一步,为此目的,我在Netty上编写了简单的服务器,在oio纯TCP上编写了简单的客户端。 客户端发送随机文本数据包,并且必须接收“ Ack”消息。请参阅处理程序方法: 问题是-当我尝试发送回“ Ack”字符串时-客户端什么也没收到。但是,当我尝试发送回来的消息时,它工作正常,并且我在客户端看到回显。 方法需要,我尝试发送-但没有任何反应。我也尝试发送(我
我正在尝试实现分布式参与者模型,该模型使用Netty作为通信协议——具有TCP连接的NIO版本。 假设我们有2个节点(机器),每个节点都有Netty的服务器实例,它们将传入的消息传递给该节点上的参与者。我希望为同一对远程参与者保持消息顺序,因此我的解决方案是使用异步writeAndFlush方法将消息发送到远程节点和参与者-当在第一条消息交付之前需要向同一参与者发送另一条消息时,我会将其添加到缓冲
我编写了一个基于Netty4的REST服务器。客户端处理程序如下所示。 netty提供的msg中的bytebuffer容量各不相同。当客户端消息大于缓冲区时,消息将被拆分。我发现每个片段都调用channelRead和ChannelReadComplete。我通常看到的是ByteBuf在512左右,message在600左右。对于前512个字节,我得到一个channelRead,然后是一个Chann