`

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

阅读更多

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

 

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

 

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

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

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

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

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

典型代码如下:

ServerBootstrap bootstrap = new ServerBootstrap(
                new NioServerSocketChannelFactory(
                		Executors.newCachedThreadPool(),
                		Executors.newCachedThreadPool(),
                		threadpool_worker)
                );

        // Parameters for tuning
        bootstrap.setOption("child.tcpNoDelay", true);
        //bootstrap.setOption("child.keepAlive", true);
        
        // Set up the event pipeline factory.
        bootstrap.setPipelineFactory(serverPipelineFactory);

        // Bind and start to accept incoming connections.
        bootstrap.bind(new InetSocketAddress(port));
        
        // please use System.out directly here. DON'T CHANGE IT!!!
        System.out.println("====Server is ready to rock on port:" + port + "====");
 

 

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的参考?

 

 

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

分享到:
评论
1 楼 3gwind 2012-08-31  
你可以参看下面文章来做一个消息包,我已经在此基础上面实现,有问题大家可以交流
http://www.cnblogs.com/Solstice/archive/2011/04/03/2004458.html

相关推荐

    netty+protobuf开发一个聊天室实例

    在本文中,我们将深入探讨如何使用Netty和Protobuf来开发一个实时聊天室实例。Netty是一个高性能、异步事件驱动的网络应用框架,适用于Java平台,它简化了TCP、UDP和HTTP等协议的服务器和客户端应用开发。而Protobuf...

    netty+protobuf入门案例.

    Netty和Protobuf是两种在IT领域中广泛使用的开源技术,尤其在开发高效、高性能的网络应用程序时。本文将深入探讨这两个技术,并结合一个入门案例,帮助初学者理解如何将它们结合起来使用。 Netty是一个高性能、异步...

    Unity与Netty进行ProtoBuf通信__

    为了实现高效的数据通信,开发者常常会结合其他技术,如Netty和ProtoBuf。本篇文章将深入探讨如何在Unity中利用ProtoBuf-net与Netty进行通信。 ProtoBuf(Protocol Buffers)是Google提出的一种数据序列化协议,它...

    cdeer-im, 基于Netty+Redis+protobuf开发的即时通讯服务器.zip

    在本文中,我们将深入探讨一个名为“cdeer-im”的开源项目,它是一个基于Netty、Redis和protobuf技术栈构建的IM服务器。 **Netty详解** Netty是一个高性能、异步事件驱动的网络应用程序框架,适用于开发可维护的高...

    netty+thrift高并发高性能

    综上所述,通过结合使用Netty和Thrift,可以有效地解决传统RPC框架存在的性能瓶颈问题,实现高并发和高性能的服务。这种组合不仅可以大幅提高系统的吞吐量,还能降低延迟,是现代分布式系统中不可或缺的技术栈之一。

    Netty发送protoBuf格式数据

    总的来说,Netty发送protoBuf格式数据的过程包括定义数据结构、生成Java类、编写编码解码器、配置Netty管道以及在服务器和客户端之间发送和接收消息。这种结合提供了强大而高效的网络通信解决方案,适用于多种应用...

    netty基于protobuf的简单示例

    在本示例中,我们将深入探讨如何利用 Netty 和 Google 的 Protocol Buffers(protobuf)来构建一个简单的服务端和客户端通信系统。 Protocol Buffers 是 Google 提供的一种数据序列化协议,它可以将结构化数据序列...

    netty+websocket通讯例子

    在本文中,我们将深入探讨如何利用 Netty 和 WebSocket 技术实现通信,以及 `callServer` 文件可能包含的内容。 WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议,它为 Web 应用程序提供了低延迟、双向通信...

    android netty cli +probuf示例

    总结来说,“android netty cli +protobuf示例”展示了如何在Android客户端利用Netty的异步网络通信能力和Protobuf的数据序列化特性,构建一个高效的即时通讯系统。这个示例涵盖了从消息定义到网络通信的全过程,...

    netty protobuf序列化 推送 android客户端

    本文将深入探讨如何使用Netty框架结合Protocol Buffers(protobuf)进行序列化,并实现数据推送至Android客户端。 Netty是一个高性能、异步事件驱动的网络应用框架,适用于开发可维护的高性能协议服务器和客户端。...

    netty学习文件,实现http,websocket,protobuf

    在本文中,我们将深入探讨Netty如何实现HTTP、WebSocket和Protobuf这三种通信方式,以及它们在服务器与客户端通信中的应用。 ### Netty与HTTP HTTP(超文本传输协议)是互联网上应用最广泛的一种网络协议,用于从...

    使用Netty+Protocol Buffer实现聊天室

    在构建一个基于Android的聊天室应用时,使用Netty和Protocol Buffers(protobuf)是一种高效且灵活的方法。本文将深入探讨这两个技术如何协同工作,以及它们在实现聊天室功能中的关键作用。 首先,让我们理解一下...

    c++客户端和java(Netty)服务器端tcp通讯

    本话题将探讨如何使用C++客户端与Java(通过Netty框架)服务器端实现TCP通讯,并涉及数据序列化工具Protocol Buffers(protobuf)在两者之间的交互。 首先,TCP(传输控制协议)是一种面向连接的、可靠的、基于字节...

    物联网之java实现(springboot + netty + 心跳,附完整源码)

    本实例主要探讨如何利用Java、Spring Boot和Netty来创建一个带有心跳机制的物联网系统,并提供完整的源代码供参考。 **Java在物联网中的角色** Java作为跨平台的编程语言,拥有广泛的应用场景,特别是在物联网(IoT)...

    netty-calc-server:Netty和Protobuf上的客户端-服务器系统的负载测试

    本文将深入探讨如何利用Netty和Protobuf构建一个客户端-服务器系统,并进行负载测试。 首先,我们要理解Netty的核心特性。Netty采用非阻塞I/O模型,通过NIO(非阻塞输入/输出)和EPOLL(Linux下的高性能网络I/O事件...

    springboot集成netty,使用protobuf作为数据传输格式,包含心跳检测、断开重连等功能..zip

    在本文中,我们将深入探讨如何将Spring Boot与Netty结合,并使用Protocol Buffers(protobuf)作为数据传输格式,实现心跳检测、断开重连、数据上传以及主动推送等功能。这是一套综合性的技术栈,旨在构建高效、稳定...

    Netty和protocolbuf的通讯例子

    Netty和Protocol Buffers(简称Protocol Buffers,protobuf)是两个在IT行业中广泛使用的开源工具,主要用于构建高效、可靠的网络通信系统。Netty是一个高性能、异步事件驱动的网络应用程序框架,它使得开发者能够...

    chat_netty4.zip

    本文将深入探讨一个名为"chat_netty4.zip"的项目,该项目利用了Netty、Protobuf以及SwingBuilder这三者的技术,构建了一个适合初学者学习的聊天室应用。让我们一起走进这个项目,了解其背后的技术原理和实现细节。 ...

    solace-netty:基于netty+zookeeper实现远程调用

    solace-netty应该包含一套完善的异常处理和重试机制,以应对可能出现的各种问题。例如,当网络通信失败或服务响应超时时,客户端可以自动重试请求,保证业务的连续性。 8. **安全性与认证** 为了保证通信的安全性...

    netty-netty-4.1.32.final-remark.zip

    Netty 是一个高性能、异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。在深入探讨Netty的知识点之前,我们先简单理解一下标题和描述所暗示的信息。 标题 "netty-netty-4.1.32....

Global site tag (gtag.js) - Google Analytics