`
Poechant
  • 浏览: 229421 次
博客专栏
Bebe66e7-3a30-3fc9-aeea-cfa3b474b591
Nginx高性能Web服务...
浏览量:24307
5738817b-23a1-3a32-86de-632d7da73b1e
Cumulus实时媒体服务...
浏览量:22094
社区版块
存档分类
最新评论

Practical Netty (2) CS模式下的Echo及String与ChannelBuffer的转化

 
阅读更多

Practical Netty (2) CS模式下的Echo及String与ChannelBuffer的转化

1. Echo TCP Server

Netty 服务器写多了之后就知道,主要的不同就在于 Handler 的实现。当然 Bootstrap 的不同使用也是有所影响的。


/**
 * EchoTcpServer.java
 */
package test.netty;

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 EchoTcpServer {
    
    private final int port;
    
    public EchoTcpServer(int port) {
        this.port = port;
    }
    
    public void run() {
        ServerBootstrap sb = new ServerBootstrap(
                new NioServerSocketChannelFactory(
                        Executors.newCachedThreadPool(),
                        Executors.newCachedThreadPool()));
        sb.setPipelineFactory(new ChannelPipelineFactory() {
            @Override
            public ChannelPipeline getPipeline() throws Exception {
                return Channels.pipeline(new EchoTcpServerHandler());
            }
        });
        sb.bind(new InetSocketAddress(port));
    }
    
    public static void main(String[] args) {
        new EchoTcpServer(28080).run();
    }
}

最关键的自然是 Handler。EchoTcpServerHandler继承SimpleChannelHandler,覆盖messageReceived,参数MessageEvent.getMessage()可以得到 Client 发送来的消息,再调用e.getChannel().write(…)写会给 Client。


/**
 * EchoTcpServerHandler.java
 */
package test.netty;

import org.jboss.netty.channel.ChannelHandlerContext;
import org.jboss.netty.channel.ExceptionEvent;
import org.jboss.netty.channel.MessageEvent;
import org.jboss.netty.channel.SimpleChannelHandler;

public class EchoTcpServerHandler extends SimpleChannelHandler {
    @Override
    public void messageReceived(ChannelHandlerContext ctx, MessageEvent e)
            throws Exception {
        e.getChannel().write(e.getMessage());
    }
    
    @Override
    public void exceptionCaught(ChannelHandlerContext ctx, ExceptionEvent e)
            throws Exception {
        e.getCause().printStackTrace();
        e.getChannel().close();
    }
}

该 EchoTcpServer,可以通过 Telnet 做客户端来访问。

2. String 与 ChannelBuffer 相互转化

通过ChannelBuffers创建一个ChannelBuffer,然后写入数据。最后再把这个ChannelBuffer写到Channel里。


String msg = "Hello, I'm client.";
ChannelBuffer buffer = ChannelBuffers.buffer(msg.length());
buffer.writeBytes(msg.getBytes());
e.getChannel().write(buffer);

上面MessageEvent.getMessage()得到的是Object,它是一个ChannelBuffer,由于 Client 发送来的是 String,所以它其实是一个 String 啦。怎么把这个 String 给打印到 Server 的终端?用如下的方法:


public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) {
    ChannelBuffer buffer = (ChannelBuffer) e.getMessage();
    System.out.println(buffer.toString(Charset.defaultCharset()));
}

Reference

  1. http://www.coderli.com/netty-string-channelbuffer
  2. http://netty.io

-

转载请注明来自柳大的CSDN博客:Blog.CSDN.net/Poechant,微博:weibo.com/lauginhom

-

分享到:
评论

相关推荐

    基于Netty的CS模式通信模块

    **基于Netty的CS模式通信模块** 在计算机网络编程中,Client-Server(CS)模式是一种常见的架构设计,其中客户端发起请求,服务器响应这些请求。Netty是一个高性能、异步事件驱动的网络应用框架,用于快速开发可...

    以netty4.1源码中的EchoServer为例对netty的源码进行分析.docx

    在本文中,我们将深入分析 Netty 4.1 源码中的 EchoServer 示例,以理解其核心组件和工作原理。 首先,我们关注 EchoServer 服务端的初始化,这涉及到两个关键组件:`bossGroup` 和 `workerGroup`。它们都是 `...

    《Netty实战》中的 echo 代码-netty-echo.zip

    《Netty实战》是一本深度解析Netty框架的权威指南,它涵盖了Netty的各种核心概念、设计模式以及实际应用案例。在"echo"代码示例中,Netty展示了如何实现一个简单的回显服务器,该服务器接收到客户端发送的数据后,会...

    Netty+设计模式

    《Netty+设计模式》这一主题涵盖了两个关键领域:Netty框架和设计模式。Netty是Java领域中的一款高性能、异步事件驱动的网络应用程序框架,常用于开发高并发、低延迟的网络服务。设计模式则是软件工程中解决常见问题...

    读书笔记:《Netty实战》中的 echo 代码.zip

    读书笔记:《Netty实战》中的 echo 代码

    Netty权威指南 第2版 带书签目录 完整版

    Netty权威 第2版 带书签目录 RPC dubbo Netty权威 第2版 带书签目录 RPC dubbo Netty权威 第2版 带书签目录 RPC dubbo Netty权威 第2版 带书签目录 RPC dubbo Netty权威 第2版 带书签目录 RPC dubbo Netty权威 第2版...

    跟闪电侠学Netty:Netty即时聊天实战与底层原理-book-netty.zip

    2. **Netty架构**:Netty采用了反应器模式,包含Bootstrap(引导类)、ServerBootstrap(服务器引导类)、Channel(通道)、EventLoop(事件循环)、Pipeline(处理链)等组件,构建了高效的事件驱动模型。...

    Netty 演示 (Netty案例大全).zip

    丢弃服务器Netty 实现时间服务器Java ByteBuffer使用案例Netty ByteBuf使用案例Netty ByteBuf 的清晰使用模式Netty实现无连接协议Echo服务器、客户端Java线程池示例Java Reactor 示例基于自定义换行的解码器TCP...

    Netty (netty-netty-5.0.0.Alpha2.tar.gz)

    Netty (netty-netty-5.0.0.Alpha2.tar.gz)是一个 NIO 客户端服务器框架,可以快速轻松地开发协议服务器和客户端等网络应用程序。它极大地简化和流线了网络编程,例如 TCP 和 UDP 套接字服务器。 “快速和简单”并...

    netty入门Demo源码

    Netty服务端与客户端,数据的发送与接收 使用:先运行TimeServer,在运行TimeClient。成功连接后,服务器发送一个时间给客户端。输出到客户端控制台 4.第三个示例 com.user_1 Netty将java对象作为数据的发送与...

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

    64_Channel与ChannelPipeline关联关系及模式运用 65_ChannelPipeline创建时机与高级拦截过滤器模式的运用 66_Netty常量池实现及ChannelOption与Attribute作用分析 67_Channel与ChannelHandler及...

    netty5.0.0.Alpha1(Alpha2)

    下载地址:... netty-all-5.0.0.Alpha2.jar netty-all-5.0.0.Alpha2-sources.jar netty-all-5.0.0.Alpha2-javadoc.jar netty-example-5.0.0.Alpha2.jar netty-example-5.0.0.Alpha2-sources.jar 等

    netty_echo.zip

    Netty Echo程序是一个基于Java和Netty框架的简单TCP通信示例,用于演示如何通过网络在服务器和客户端之间传输数据。Netty是一个高性能、异步事件驱动的网络应用框架,适用于开发可伸缩且高度并发的网络应用程序。在...

    精通并发与netty 无加密视频

    第64讲:Channel与ChannelPipeline关联关系及模式运用 第65讲:ChannelPipeline创建时机与高级拦截过滤器模式的运用 第66讲:Netty常量池实现及ChannelOption与Attribute作用分析 第67讲:Channel与...

    MINA2与Netty4比较分析

    Mina2与Netty4是两种非常流行的网络编程框架,它们都用于构建高性能的网络服务器和客户端。由于它们都是基于Java NIO实现,因此有很多共同点,但同时也存在一些重要的差异。接下来将根据标题和描述的要求详细分析...

    Netty使用与实现.pdf

    ### Netty的使用与实现详解 #### 一、Netty简介 Netty是一个高性能、异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器与客户端。它简化了网络程序的开发过程,提供了丰富的特性支持,使得...

    Netty4EchoDemo

    Netty4EchoDemo是一个基于Netty 4框架实现的简单回显客户端(echo client)和服务器(echo server)示例。这个项目适用于那些想要学习如何使用Netty进行网络编程的开发者,尤其是对Java NIO(非阻塞I/O)感兴趣的...

    Netty进阶之路-跟着案例学Netty

    《Netty进阶之路-跟着案例学Netty》是由知名技术专家李林峰撰写的一本专为Java开发者深入理解Netty框架而准备的书籍。这本书旨在通过实例教学,帮助读者全面掌握Netty的核心特性和实战技巧,提升网络编程的能力。 ...

    Netty实现原理浅析

    Netty基于Reactor模式设计,这一模式是一种高效的异步I/O模型,能够有效地处理大量并发连接。Reactor模型通常包括以下几个关键组件: 1. **Selector**(选择器):用于多路复用I/O操作。 2. **Acceptor**(接受者)...

Global site tag (gtag.js) - Google Analytics