【问题标题】:transfer data dynamically with netty使用netty动态传输数据
【发布时间】:2014-12-12 02:49:07
【问题描述】:

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

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

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

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

我认为唯一的方法是write()。不过好像实现了这个方法就得自己调用这个方法了,不知道哪里可以得到参数ChannelHandlerContext

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


附言 我对java网络编程和Netty都不熟悉。我学到的所有东西都是基于这本书,我还没有读完。 :)

【问题讨论】:

    标签: java network-programming netty


    【解决方案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
        }
    }
    

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

    【讨论】:

      猜你喜欢
      • 2014-09-20
      • 2019-01-07
      • 1970-01-01
      • 1970-01-01
      • 2018-09-05
      • 1970-01-01
      • 1970-01-01
      • 2016-03-20
      • 2016-09-29
      相关资源
      最近更新 更多