java - 已收到消息未调用

标签 java netty

我创建了一个名为 MessageHandler 的类:

@Override
public void initChannel(SocketChannel ch) throws Exception {
    ch.pipeline().addLast(
            new LoggingHandler(LogLevel.INFO),
            new GameServerHandler());
    ch.pipeline().addLast("protobufHandler", new MessageHandler()); 
}

另外,我添加了 messageReceiver 函数,我无法按照文档所述覆盖它,因为它给了我一个错误:

public class MessageHandler extends SimpleChannelInboundHandler<Object> {
    // @Override
    public void messageReceived(ChannelHandlerContext ctx, Object msg) {
        System.out.println(msg);
        // super.messageReceived(ctx, msg);
    }

    @Override
    public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) {
        cause.printStackTrace();
        ctx.close();
    }

    @Override
    protected void channelRead0(ChannelHandlerContext arg0, Object arg1)
            throws Exception {
        // TODO Auto-generated method stub
    }
}

但是从未调用 messageReceived 函数:

INFO: [id: 0xbb603bfd, /127.0.0.1:54206 => /127.0.0.1:5000] ACTIVE
Oct 07, 2014 10:48:49 PM io.netty.handler.logging.LoggingHandler logMessage
INFO: [id: 0xbf711f5f, /127.0.0.1:54205 => /127.0.0.1:5000] RECEIVED(383B)
// Message printed by the Netty logger, not from my function.

最佳答案

在 netty 4.x 中,您需要重写并将 System.out.println(...) 内容放入的方法是channelRead0(...)。仅在 netty 5 中它的 messageReceived(...)。

关于java - 已收到消息未调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26245059/

相关文章:

java - 为什么关闭 Java Executor 时要保留中断状态?

java - 如何在各种消息事件之间传递参数

java - 如何构建 netty-transport-native-epoll-4.0.32.Final-linux-x86_64.jar?

java - netty CompositeByteBuf是直接的还是间接的

javascript - JavaScript 客户端和 Netty 服务器之间的安全 WebSocket 连接

java - Netty - 发送失败 : UnsupportedOperationException: unsupported message type

java - Clover 无法检测 UTF-8 源

java - Drools:mvel 和 java 方言之间的差异

java - android studio 自动完成 : how to display constructors with parameters

java - Winsock2 和 JNA,无法使 WSAEnumProtocols() 正常工作