首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

Netty + Protobuf 的客户端模式运用和有关问题探讨

2012-06-28 
Netty + Protobuf 的客户端模式运用和问题探讨使用NETTY之前,当然需要先看一下所带的samples。?简单的hello

Netty + Protobuf 的客户端模式运用和问题探讨

使用NETTY之前,当然需要先看一下所带的samples。

?

简单的hello world,可能大家都没啥感觉,觉得NETTY其实很简单:

?

1. 对于服务器端,需要写下面几个:

a. 写个ServerHandler,来接收并处理服务端业务逻辑;

b. 照葫芦画瓢整个Pineline,比如ServerPipelineFactory,把一些现成的和自己的ServerHandler串糖葫芦那样串起来;

c. 最后写个简单的Server,把ServerBootstrap和ServerPipelineFactory装起来;

d. 好吧,再加一些优化/适合的参数,比如child.tcpNoDelay,child.keepAlive之类的。

典型代码如下:

?

?

2. 对于客户端,其实与服务器端非常相似,如下:

a. 写个ClientHandler,来接收并处理客户端业务逻辑;

b. 照葫芦画瓢整个Pineline,比如ClientPipelineFactory,把一些现成的和自己的ClientHandler串糖葫芦那样串起来;

c. 最后写个简单的Client,把ClientBootstrap和ClientPipelineFactory装起来。

典型代码如下:

// Set up.        bootstrap = new ClientBootstrap(                new NioClientSocketChannelFactory(                        Executors.newCachedThreadPool(),                        Executors.newCachedThreadPool()));        // Configure the event pipeline factory.        bootstrap.setPipelineFactory(new ClientPipelineFactory());        // Make a new connection.        logger.debug("trying to connect to host[{}] and port[{}]...", host, port);        channelFuture = bootstrap.connect(new InetSocketAddress(host, port));        // Wait until the connection is made successfully.        channel = channelFuture.awaitUninterruptibly().getChannel();        logger.debug("successfully connected to host[{}] and port[{}]!", host, port);
?

一般而言,hello world就可以玩了。

?

?

但对于实战性的应用开发,问题才刚刚开始:

1. 针对NETTY,合理的设计模式如何运用?

对于服务端,往往是在ServerHandler里,接收=》处理=》write,一般关照好messageReceived方法即可,比较简单,至于如何搞定你的业务逻辑设计,跟NETTY无关,在此不谈。

对于客户端,我们不得不关心,有几个要点:

a. 收发是异步的,如果发送者只管发而不管后果,这也可以不谈,跟Server端一样,非常简单

b. 如果发送者发了还要管收,这就来劲了,怎么玩?这是我们要探讨的第一个问题,我先抛出来,接下来再议

?

2. 为了引入高性能的binary protocol, 引入了google的protobuf,暂时没发现问题,如果是同构平台(java)的话,堪称完美,但由于netty针对protocol有专门的Decoder/Encoder。

问题二是:我google了半天,好像没有教好的案例,可以实现异构平台(如.net)访问NETTY + Protobuf的参考?

?

?

各位如有经验的,可以来分享、讨论,我会继续跟进。

热点排行