用netty动态传输数据

时间:2014-12-12 02:49:08

标签: java network-programming netty

我已经学习了一段时间的Netty,而且从Netty的教程(MEAP一书)中,几乎所有的例子都基于一个固定的框架,比如EventLoop,{{ 1}},似乎只有Bootstrap中处理程序的实现是我们真正应该关注的事情。

在这里,我想基于服务器/客户端模式设计一个简单的国际象棋游戏,其中两个玩家在不同的计算机上。我想用Netty传输背景数据。(我只是想用netty练习)

在这样的游戏中,前端GUI检测到玩家放下棋子然后对数据进行一些更改。然后,我需要将这些数据传递给其他玩家。这就是问题所在。

我不知道如何在这种情况下实现channelPipeline,因为在大多数示例中,处理程序似乎没有添加动态数据。例如,数据是在通过方法ChannelHandler或其他方式激活通道时创建的。所有这些方法都是由Netty本身自动调用的。

我认为唯一的方法是channelActive()。但是,如果我实现这个方法,似乎我必须自己调用这个方法,我不知道在哪里可以得到参数write()

那么,如何解决这样的问题呢?


P.S。 我不熟悉java网络编程,也不熟悉Netty。我学到的所有东西都是基于这本书,我还没有完成阅读。 :)

1 个答案:

答案 0 :(得分:1)

Netty的频道处理看起来

package netty_sample;

import org.jboss.netty.channel.ChannelHandlerContext;
import org.jboss.netty.channel.MessageEvent;
import org.jboss.netty.channel.SimpleChannelHandler;

/**
 * Server side action
 */
public class EchoServerHandler extends SimpleChannelHandler {
    /**
     * This method will be invoked when server recieved a message
    */
    @Override
    public void messageReceived(ChannelHandlerContext ctx, MessageEvent event) {
        String msg = (String) event.getMessage(); // extract a message received

        // You can write any code which handles the message, changes data, and create message for client, etc. 

        ctx.getChannel().write(someMessageToClient); // send back to client
    }
}

据我所知,当服务器收到消息时,动态调用处理程序例程(在事件驱动中)。 因此处理程序中的代码动态工作,您可以在代码中编写任何内容。