【问题标题】:Netty 3.10 Final Doesnt Have Channel.WriteAndFlush?Netty 3.10 Final 没有 Channel.WriteAndFlush?
【发布时间】:2015-05-22 02:23:41
【问题描述】:

我最近开始使用 Netty,我下载了 Netty 的最终版本 (3.10),我正在按照基本教程开始并从客户端写入服务器,但是遇到了问题。

我正在使用对服务器的通道引用来编写:

channel.write(obj);

channel 的类型是 Channel,但它永远不会在另一端的处理程序中接收到(是的,我的处理程序工作正常并接收连接和断开连接)。

我做了一些研究并看到使用 channel.writeAndFlush(obj) 但这不是一个实际的方法。我查看了以前的 beta 和 alpha 版本,方法是存在的,但也有许多其他变化。那么channel.write(obj)不起作用还是在调用write(obj)之后我错过了另一个步骤?我希望能够随时写入通道,所以我不会有 ChannelHandlerContext,只有当它传递给处理程序时。

任何帮助将不胜感激。

编辑:

在我的管道中,我放入了一个分隔符、字符串编码器、字符串解码器和我的事件处理程序ServerListener

new DelimiterBasedFrameDecoder(server.getConfig().PACKET_BUFFER_SIZE, Delimiters.lineDelimiter()), new StringEncoder(), new StringDecoder(), new ServerListener()

在客户端我有相同的处理程序以相同的顺序,不包括 ServerListener

然而,当通过通道发送字符串时(是的,它确实会打印出 Connected To Server

@Override
public void channelConnected(ChannelHandlerContext ctx, Connection con, ChannelStateEvent e) {
    System.out.println("Connected To Server");
    Channel c = ctx.getChannel();
    c.write("Test");
}

即使我继承了 messageReceived 方法并且即使我继承了 channelConnected 的其他方法,服务器端也不会打印任何内容。

这是我的 messageReceived 方法:

@Override
public void messageReceived( ChannelHandlerContext ctx, MessageEvent e) throws Exception {
    System.out.println("Received");
    super.messageReceived(ctx, e);
}

【问题讨论】:

    标签: networking netty


    【解决方案1】:

    在 Netty 3.10(4.0 之前的任何版本)中,没有刷新,因为它是隐式的。

    所以当你做ctx.getChannel().write(buf)channel.write(bug)时,它应该直接写到outband。

    如果不是,这可能意味着您的处理程序存在问题。

    您可以查看示例:Example source

    【讨论】:

    • 很高兴知道!是的,我遵循了那个回声教程,但仍然遇到问题。在主帖中,我发布了有关我的管道和处理程序的更多信息。
    • 我实际上只是尝试了回显服务器示例,但它也不起作用。它根本没有收到任何东西
    • 我尝试添加自定义解码器并将其附加到服务器,但是当我调试它并在解码器中放置断点并将对象从客户端发送到服务器时,它从不调用断点这意味着它永远不会被接收到。
    【解决方案2】:

    所以我发现了我的问题。我将 StringEncoder/StringDecoder 与 ObjectEncoder/ObjectDecoder 结合使用,它们正在弄乱彼此的字节。出于某种原因,这在早些时候没有发生,但现在对于可能遇到同样问题的人来说,请确保它们都没有设置为处理程序。

    【讨论】:

    • 太好了,您找到了问题的根本原因! ;-)
    猜你喜欢
    • 1970-01-01
    • 2018-11-17
    • 2012-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-14
    相关资源
    最近更新 更多