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
- http://www.coderli.com/netty-string-channelbuffer
- http://netty.io
-
转载请注明来自柳大的CSDN博客:Blog.CSDN.net/Poechant,微博:weibo.com/lauginhom
-
分享到:
相关推荐
**基于Netty的CS模式通信模块** 在计算机网络编程中,Client-Server(CS)模式是一种常见的架构设计,其中客户端发起请求,服务器响应这些请求。Netty是一个高性能、异步事件驱动的网络应用框架,用于快速开发可...
在本文中,我们将深入分析 Netty 4.1 源码中的 EchoServer 示例,以理解其核心组件和工作原理。 首先,我们关注 EchoServer 服务端的初始化,这涉及到两个关键组件:`bossGroup` 和 `workerGroup`。它们都是 `...
《Netty实战》是一本深度解析Netty框架的权威指南,它涵盖了Netty的各种核心概念、设计模式以及实际应用案例。在"echo"代码示例中,Netty展示了如何实现一个简单的回显服务器,该服务器接收到客户端发送的数据后,会...
《Netty+设计模式》这一主题涵盖了两个关键领域:Netty框架和设计模式。Netty是Java领域中的一款高性能、异步事件驱动的网络应用程序框架,常用于开发高并发、低延迟的网络服务。设计模式则是软件工程中解决常见问题...
读书笔记:《Netty实战》中的 echo 代码
Netty权威 第2版 带书签目录 RPC dubbo Netty权威 第2版 带书签目录 RPC dubbo Netty权威 第2版 带书签目录 RPC dubbo Netty权威 第2版 带书签目录 RPC dubbo Netty权威 第2版 带书签目录 RPC dubbo Netty权威 第2版...
2. **Netty架构**:Netty采用了反应器模式,包含Bootstrap(引导类)、ServerBootstrap(服务器引导类)、Channel(通道)、EventLoop(事件循环)、Pipeline(处理链)等组件,构建了高效的事件驱动模型。...
丢弃服务器Netty 实现时间服务器Java ByteBuffer使用案例Netty ByteBuf使用案例Netty ByteBuf 的清晰使用模式Netty实现无连接协议Echo服务器、客户端Java线程池示例Java Reactor 示例基于自定义换行的解码器TCP...
Netty (netty-netty-5.0.0.Alpha2.tar.gz)是一个 NIO 客户端服务器框架,可以快速轻松地开发协议服务器和客户端等网络应用程序。它极大地简化和流线了网络编程,例如 TCP 和 UDP 套接字服务器。 “快速和简单”并...
Netty服务端与客户端,数据的发送与接收 使用:先运行TimeServer,在运行TimeClient。成功连接后,服务器发送一个时间给客户端。输出到客户端控制台 4.第三个示例 com.user_1 Netty将java对象作为数据的发送与...
64_Channel与ChannelPipeline关联关系及模式运用 65_ChannelPipeline创建时机与高级拦截过滤器模式的运用 66_Netty常量池实现及ChannelOption与Attribute作用分析 67_Channel与ChannelHandler及...
下载地址:... 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程序是一个基于Java和Netty框架的简单TCP通信示例,用于演示如何通过网络在服务器和客户端之间传输数据。Netty是一个高性能、异步事件驱动的网络应用框架,适用于开发可伸缩且高度并发的网络应用程序。在...
第64讲:Channel与ChannelPipeline关联关系及模式运用 第65讲:ChannelPipeline创建时机与高级拦截过滤器模式的运用 第66讲:Netty常量池实现及ChannelOption与Attribute作用分析 第67讲:Channel与...
Mina2与Netty4是两种非常流行的网络编程框架,它们都用于构建高性能的网络服务器和客户端。由于它们都是基于Java NIO实现,因此有很多共同点,但同时也存在一些重要的差异。接下来将根据标题和描述的要求详细分析...
### Netty的使用与实现详解 #### 一、Netty简介 Netty是一个高性能、异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器与客户端。它简化了网络程序的开发过程,提供了丰富的特性支持,使得...
Netty4EchoDemo是一个基于Netty 4框架实现的简单回显客户端(echo client)和服务器(echo server)示例。这个项目适用于那些想要学习如何使用Netty进行网络编程的开发者,尤其是对Java NIO(非阻塞I/O)感兴趣的...
《Netty进阶之路-跟着案例学Netty》是由知名技术专家李林峰撰写的一本专为Java开发者深入理解Netty框架而准备的书籍。这本书旨在通过实例教学,帮助读者全面掌握Netty的核心特性和实战技巧,提升网络编程的能力。 ...
Netty基于Reactor模式设计,这一模式是一种高效的异步I/O模型,能够有效地处理大量并发连接。Reactor模型通常包括以下几个关键组件: 1. **Selector**(选择器):用于多路复用I/O操作。 2. **Acceptor**(接受者)...