`
66441329
  • 浏览: 8747 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

Netty初始学习示例

 
阅读更多
1、服务端建立类TestServerHandler

代码:
package com.cora.api.client;

import java.nio.charset.Charset;

import org.jboss.netty.buffer.ChannelBuffer;
import org.jboss.netty.buffer.ChannelBuffers;
import org.jboss.netty.channel.ChannelHandlerContext;
import org.jboss.netty.channel.ExceptionEvent;
import org.jboss.netty.channel.MessageEvent;
import org.jboss.netty.channel.SimpleChannelUpstreamHandler;
 
 
public class TestServerHandler extends SimpleChannelUpstreamHandler {
 
    @Override
    public void messageReceived(
            ChannelHandlerContext ctx, MessageEvent e) {
   
        ChannelBuffer acceptBuff = (ChannelBuffer) e.getMessage();
        String info = acceptBuff.toString("UTF-8");
//        info = acceptBuff.toString();
        if(info != null && !"".equals(info)) {
            System.out.println("Netty:"+info);
            ChannelBuffer sendBuff = ChannelBuffers.dynamicBuffer();
            sendBuff.writeBytes("Netty:Yes".getBytes());
            e.getChannel().write(sendBuff);
        }else {
            e.getChannel().write("_______服务端没有接收到信息!");
        }
        e.getChannel().close();
    }
 
    @Override
    public void exceptionCaught(
            ChannelHandlerContext ctx, ExceptionEvent e) {
        e.getCause();
        e.getChannel().close();
    }
}
2、服务端建立类TestServer
代码:
package com.cora.api.client;

import java.net.InetSocketAddress;
import java.util.concurrent.Executors;
 
import org.jboss.netty.bootstrap.ServerBootstrap;
import org.jboss.netty.channel.ChannelPipeline;
import org.jboss.netty.channel.ChannelPipelineFactory;
import org.jboss.netty.channel.Channels;
import org.jboss.netty.channel.socket.nio.NioServerSocketChannelFactory;
 
public class TestServer {
 
    private final int port;
 
    public TestServer(int port) {
        this.port = port;
    }
 
    public void run() {
        ServerBootstrap bootstrap = new ServerBootstrap(
                new NioServerSocketChannelFactory(
                        Executors.newCachedThreadPool(),
                        Executors.newCachedThreadPool()));
 
//        bootstrap.setPipelineFactory(new ChannelPipelineFactory() {
//            public ChannelPipeline getPipeline() throws Exception {
//                return Channels.pipeline(new TestServerHandler());
//            }
//        });
        TestServerHandler handler = new TestServerHandler();
       
        bootstrap.getPipeline().addLast("handler", handler);
        bootstrap.setOption("child.tcpNoDelay", true);
        bootstrap.setOption("child.keepAlive", true);
 
        bootstrap.bind(new InetSocketAddress(port));
    }
 
    public static void main(String[] args) throws Exception {
        new TestServer(8080).run();
    }
}
3客户端建立类TestClientHandler
代码:
package com.cora.api.client;

import java.nio.charset.Charset;

import org.jboss.netty.buffer.ChannelBuffer;
import org.jboss.netty.buffer.ChannelBuffers;
import org.jboss.netty.channel.ChannelHandlerContext;
import org.jboss.netty.channel.ChannelStateEvent;
import org.jboss.netty.channel.ExceptionEvent;
import org.jboss.netty.channel.MessageEvent;
import org.jboss.netty.channel.SimpleChannelUpstreamHandler;
 
public class TestClientHandler extends SimpleChannelUpstreamHandler {
 
    private final String firstMessage;
 
    public TestClientHandler(String firstMessageSize) {
        firstMessage = firstMessageSize;
    }
 
    @Override 
    public void channelConnected(
            ChannelHandlerContext ctx, ChannelStateEvent e) {
        ChannelBuffer sendBuff = ChannelBuffers.dynamicBuffer();
        sendBuff.writeBytes(firstMessage.getBytes());
         
        e.getChannel().write(sendBuff);
        System.out.println("I:" + firstMessage);
    }
 
    @Override 
    public void messageReceived(
            ChannelHandlerContext ctx, MessageEvent e) {
        ChannelBuffer acceptBuff = (ChannelBuffer) e.getMessage();
        String info = acceptBuff.toString("UTF-8");
//        info = acceptBuff.toString();
        System.out.println(info);
        e.getChannel().close();
    }
 
    @Override 
    public void exceptionCaught(
            ChannelHandlerContext ctx, ExceptionEvent e) {
        e.getCause();
        e.getChannel().close();
    }
}
4、客户端建立类TestClient
代码:
package com.cora.api.client;

import java.net.InetSocketAddress;
import java.util.concurrent.Executors;
 
import org.jboss.netty.bootstrap.ClientBootstrap;
import org.jboss.netty.channel.ChannelFuture;
import org.jboss.netty.channel.ChannelPipeline;
import org.jboss.netty.channel.ChannelPipelineFactory;
import org.jboss.netty.channel.Channels;
import org.jboss.netty.channel.socket.nio.NioClientSocketChannelFactory;
 
public class TestClient {
 
    private final String host;
    private final int port;
    private final String firstMessageSize;
 
    public TestClient(String host, int port, String firstMessageSize) {
        this.host = host;
        this.port = port;
        this.firstMessageSize = firstMessageSize;
    }
 
    public void run() {
        ClientBootstrap bootstrap = new ClientBootstrap(
                new NioClientSocketChannelFactory(
                        Executors.newCachedThreadPool(), 
                        Executors.newCachedThreadPool()));
 
//        bootstrap.setPipelineFactory(new ChannelPipelineFactory() {
//            public ChannelPipeline getPipeline() throws Exception {
//                return Channels.pipeline(
//                        new TestClientHandler(firstMessageSize));
//            }
//        });
       
        TestClientHandler handler = new TestClientHandler(firstMessageSize);

        bootstrap.getPipeline().addLast("handler", handler);
        bootstrap.setOption("tcpNoDelay", true);
        bootstrap.setOption("keepAlive", true);
 
        ChannelFuture future = bootstrap.connect(new InetSocketAddress(host, port));
 
        future.getChannel().getCloseFuture().awaitUninterruptibly();
 
        bootstrap.releaseExternalResources();
    }
 
    public static void main(String[] args) throws Exception {
        new TestClient("127.0.0.1", 8080, "Hello, Netty!我可以问一个问题吗?").run();
    }
}
5、示例代码见附件
分享到:
评论

相关推荐

    netty框架,服务端、客户端代码示例

    Netty 是一个高性能、异步事件驱动的网络应用程序框架,用于快速...通过学习和理解这段代码,开发者可以进一步探索Netty的高级特性,如编解码器、心跳机制、安全性和性能优化等,从而更好地应用到实际的项目开发中。

    android netty cli +probuf示例

    在Android平台上实现即时通讯功能,Netty和Protobuf(Protocol Buffers)的结合是一个高效、可靠的解决方案。...开发者可以通过学习和实践这个示例,提升自己在Android网络编程和数据交换方面的技能。

    NettyDemo包含客户端服务端

    Netty 是一个高性能、异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。...通过研究这个示例,可以深入学习 Netty 的核心概念以及如何在 Android 和后端服务之间建立稳定的数据交互。

    netty学习教程

    ### Netty学习教程知识点梳理 #### 一、Netty简介 - **定义**:Netty是由JBOSS提供的一个高性能的、异步的、事件驱动的网络应用框架,主要用于简化和加速高性能网络应用和服务的开发过程。 - **应用场景**: - ...

    netty学习资料(java源代码实例).zip

    压缩包中的“netty-book-source”很可能包含了Netty框架的实战代码示例,这些示例可以帮助你理解以下知识点: 1. **Channel初始化与注册**:了解如何创建并初始化一个Channel,以及如何将它注册到EventLoop中。 2....

    netty实现的聊天代码

    通过阅读和学习这个代码,你可以掌握 Netty 的基本架构,包括服务器和客户端的创建、事件驱动模型、ChannelPipeline 的配置,以及数据编解码等关键概念。这对于进一步研究高并发、高性能的网络应用开发非常有帮助。

    Netty5入门3个简单例子

    第三个例子是一个参考的网站地址,可能提供更详细的Netty教程和示例代码,帮助学习者扩展知识。网站资源可以包含各种协议(如HTTP、FTP、TCP/UDP等)的实现,以及如何处理异常、性能优化和日志记录等高级主题。 在...

    Netty-入门Netty编码

    Netty 的源代码清晰且注释丰富,对于学习和调试都非常有帮助。通过阅读源码,我们可以更好地理解其内部工作原理,例如事件的处理流程、I/O 操作的优化以及内存管理策略。 至于“工具”,Netty 可以与其他开发工具和...

    netty4.0 demo

    这个"Netty4.0 demo"压缩包包含了一些Netty 4.0版本的应用示例代码,可以帮助我们更好地理解和学习Netty的工作原理以及如何在实际项目中运用它。 1. **Netty简介** Netty 是由JBOSS组织开发的一个开源项目,最初...

    Netty简单应答程序

    Netty是一个高性能、异步事件驱动的网络应用框架,它被广泛用于开发高效的服务器和客户端,尤其在处理高并发...通过学习和理解这个示例,你可以深入理解Netty框架的工作原理,并为构建更复杂的网络服务打下坚实的基础。

    netty学习demo(初学代码结构+固定消息+自定义分隔符+自定义协议+心跳+http+序列化压缩+自动断线)

    在Netty中,通常会有一个启动类,它负责初始化`ServerBootstrap`并绑定监听端口。`ChannelInitializer`是用于配置新创建的`Channel`的,它会添加`ChannelHandler`到`ChannelPipeline`中。`ChannelHandler`是Netty的...

    netty学习笔记

    ### Netty学习笔记知识点概述 #### 一、Netty简介 Netty是一个广泛使用的高性能、异步事件驱动的网络应用程序框架,它简化了网络编程的复杂性,使得开发者能够更轻松地开发高性能、高可靠性的网络服务器和客户端。...

    springboot与netty整合

    在"netty-demo01"这个压缩包中,可能包含了实现上述步骤的源代码示例,包括`pom.xml`配置文件,`Main`类启动Netty服务器,以及相关的处理器类和配置文件。通过学习和研究这些代码,你可以更深入地理解SpringBoot与...

    Netty5.rar

    Netty 是一个高性能、异步事件驱动的网络应用程序框架,用于快速开发可维护的高...在提供的实例中,我们可以学习如何使用 Netty 实现客户端与服务端的交互,这对于理解 Netty 的工作原理和提升网络编程能力非常有帮助。

    netty分享包括PPT和demo

    Netty 是一个高性能、异步事件驱动的网络应用程序框架,用于快速开发可维护的高...通过PPT的学习和示例代码的实践,开发者可以深入理解Netty的工作原理,从而在实际项目中更好地利用其优势,构建高效稳定的网络应用。

    netty3的完整配置实例

    1. **初始化 ServerBootstrap**:这是 Netty 服务端的启动类,用于配置服务器并启动监听。 2. **配置 ChannelPipeline**:这是 Netty 中处理网络事件的链式结构,你可以添加自定义的 ChannelHandler 来处理特定的...

    netty5完整配置实例

    首先,Netty 5可能已经不被广泛使用,因为最新的稳定版本通常是更好的选择,但学习历史版本可以帮助理解其演进过程。这个实例提供了基于Maven的工程结构,这意味着它利用Maven的依赖管理功能来简化项目构建和依赖项...

    精通并发与netty视频教程(2018)视频教程

    69_Netty初始化流程总结及Channel与ChannelHandlerContext作用域分析 70_Channel注册流程深度解读 71_Channel选择器工厂与轮询算法及注册底层实现 72_Netty线程模型深度解读与架构设计原则 73_Netty底层架构系统总结...

    Android基于Netty框架实现通信

    在Android开发中,为了实现高效的网络通信,开发者常常会选择使用Netty框架。Netty是一个高性能、异步事件驱动的网络应用程序框架,...在项目`NettyDemo`中,你可以找到一个简单的示例,帮助理解这些概念并进行实践。

Global site tag (gtag.js) - Google Analytics