我已经学习了一段时间的Netty,而且从Netty的教程(MEAP一书)中,几乎所有的例子都基于一个固定的框架,比如EventLoop
,{{ 1}},似乎只有Bootstrap
中处理程序的实现是我们真正应该关注的事情。
在这里,我想基于服务器/客户端模式设计一个简单的国际象棋游戏,其中两个玩家在不同的计算机上。我想用Netty传输背景数据。(我只是想用netty练习)
在这样的游戏中,前端GUI检测到玩家放下棋子然后对数据进行一些更改。然后,我需要将这些数据传递给其他玩家。这就是问题所在。
我不知道如何在这种情况下实现channelPipeline
,因为在大多数示例中,处理程序似乎没有添加动态数据。例如,数据是在通过方法ChannelHandler
或其他方式激活通道时创建的。所有这些方法都是由Netty本身自动调用的。
我认为唯一的方法是channelActive()
。但是,如果我实现这个方法,似乎我必须自己调用这个方法,我不知道在哪里可以得到参数write()
。
那么,如何解决这样的问题呢?
P.S。 我不熟悉java网络编程,也不熟悉Netty。我学到的所有东西都是基于这本书,我还没有完成阅读。 :)
答案 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
}
}
据我所知,当服务器收到消息时,动态调用处理程序例程(在事件驱动中)。 因此处理程序中的代码动态工作,您可以在代码中编写任何内容。