netty 4.0 Object 传输

1对于服务端,

private void bindPort(int port){
EventLoopGroup workGroup = new NioEventLoopGroup();
EventLoopGroup bossGroup = new NioEventLoopGroup();
try{
ServerBootstrap b = new ServerBootstrap();
b.group(bossGroup, workGroup);
b.channel(NioServerSocketChannel.class)
 .option(ChannelOption.SO_BACKLOG, 128)
 .handler(new LoggingHandler(LogLevel.INFO))
 .childHandler(new ChannelInitializer<SocketChannel>() {
@Override
protected void initChannel(SocketChannel ch) throws Exception {
ch.pipeline().addLast(new ObjectDecoder(1024*1024, 
ClassResolvers.weakCachingConcurrentResolver(
this.getClass().getClassLoader())));
ch.pipeline().addLast(new ObjectEncoder());
ch.pipeline().addLast(new ServerReqHandler());
}
});
ChannelFuture channelFuture = b.bind(port).sync();
channelFuture.channel().closeFuture().sync();
}catch(Exception e){
}finally{
workGroup.shutdownGracefully();
bossGroup.shutdownGracefully();
}
}
class ServerReqHandler extends ChannelInboundHandlerAdapter{
@Override
public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause)
throws Exception {
cause.printStackTrace();
ctx.close();
}
@Override
public void channelActive(ChannelHandlerContext ctx) throws Exception {
System.out.println("channel active");
}
@Override
public void channelRead(ChannelHandlerContext ctx, Object msg)throws Exception {
ServerMsg serverMsg = (ServerMsg) msg;
System.out.println(serverMsg);
}
}

在添加自己的Handler(ServerReqHandler)之前,要添加ObjectDecoder和ObjectEncoder,

自己的Handler在接受到类之后可直接强转,这里注意,被传输的类(ServerMsg)一定要实现Serializable接口(序列化)

2.对于客户端

private void connect(int port){
EventLoopGroup workGrop = new NioEventLoopGroup();
try{
Bootstrap bootstrap = new Bootstrap();
bootstrap.group(workGrop);
bootstrap.channel(NioSocketChannel.class)
 .option(ChannelOption.TCP_NODELAY, true)
 .handler(new ChannelInitializer<Channel>() {
@Override
protected void initChannel(Channel ch) throws Exception {
ch.pipeline().addLast(new ObjectDecoder(1024*1024,  
ClassResolvers.weakCachingConcurrentResolver(
this.getClass().getClassLoader())));
ch.pipeline().addLast(new ObjectEncoder());
ch.pipeline().addLast(new ClientReqHandler());
}
});
ChannelFuture channelFuture = bootstrap.connect("localhost", port).sync();
channelFuture.channel().closeFuture().sync();
}catch(Exception e){
e.printStackTrace();
}finally{
workGrop.shutdownGracefully();
}
 
}
class ClientReqHandler extends ChannelInboundHandlerAdapter{
@Override
public void channelActive(ChannelHandlerContext ctx) throws Exception {
for(int i = 0; i < 10; i++){
ServerMsg msg = parseServerMsg(i);
ctx.write(msg);
}
ctx.flush();
}
private ServerMsg parseServerMsg(int id){
ServerMsg msg = new ServerMsg();
msg.setId(id);
msg.setName(id + "");
return msg;
}
@Override
public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause)throws Exception {
cause.printStackTrace();
ctx.close();
}
}

要添加的Handler与服务端一样,
在自己的Handler(ClientReqHandler)中,发送Msg时直接用ctx 

附ServerMsg
public class ServerMsg implements Serializable {

	private static final long serialVersionUID = 1L;
	private int id;
	private String name;

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	@Override
	public String toString() {
		return "id: " + id + " name: " + name;
	}

}
时间: 2024-10-06 14:16:58

netty 4.0 Object 传输的相关文章

蓝牙4.0开发 iOS &amp;&amp; Bluno 4.0 蓝牙设备传输(相关资料、文章、链接)

Bluno 4.0 蓝牙设备传输 转至元数据结尾 基本:硬件设备支持 5个按钮. 必要前提: 理解BLE 4.0+的基本概念和操作方法. 操作步骤: 设备信息服务中(180a)确定特征(2a24)是否是Bluno设备 连接设备后需要设置设备串口传输参数:服务(dfb0)中的特征(dfb2)= "AT+PASSWOR=DFRobot\r\n" (dfb2)= "AT+CURRUART=115200\r\n" 数据接收通过服务(dfb0)中的特征(2a24)获取 数据示

Netty 4.0 源码分析(四):ByteBuf

Netty是基于流的消息传递机制.Netty框架中,所有消息的传输都依赖于ByteBuf接口,ByteBuf是Netty NIO框架中的缓冲区.ByteBuf接口可以理解为一般的Byte数组,不过Netty对Byte进行了封装,增加了一些实用的方法. ChannelBuf接口 package io.netty.buffer;public interface ChannelBuf {    ChannelBufType type();    boolean isPooled();} ByteBuf

基于netty框架的Socket传输

一.Netty框架介绍 什么是netty?先看下百度百科的解释: Netty是由JBOSS提供的一个java开源框架.Netty提供异步的.事件驱动的网络应用程序框架和工具,用以快速开发高性能.高可靠性的网络服务器和客户端程序. 也就是说,Netty 是一个基于NIO的客户.服务器端编程框架,使用Netty 可以确保你快速和简单的开发出一个网络应用,例如实现了某种协议的客户,服务端应用.Netty相当简化和流线化了网络应用的编程开发过程,例如,TCP和UDP的socket服务开发. "快速&qu

Netty 5.0

主题结构 Channel(I) - AbstractChannel- AbstractNioChannel- AbstractNioByteChannel - NioSocketChannel 1. 内部有一个 DefaultChannelPipeline, 定义的 connect, read, write等方法实际是调用pipeline的方法 private final DefaultChannelPipeline pipeline; 2. 内部有 远端地址和本地地址 3. 内部有 一个uns

netty 4.0.27 获得复用的channel

  EventLoopGroup group = new NioEventLoopGroup();         try {             Bootstrap b = new Bootstrap();             b.group(group);             b.channel(NioSocketChannel.class);             b.remoteAddress(new InetSocketAddress(host, port));     

Everything搜索结果显示0 Object

比较过windows本身的文档搜索功能,Everything的本地文档搜索能力简直令人咋舌,更逆天的是软件本身体积很小. 问题:打开everything时,文件列表消失,软件下方信息为0 objects. 原因:未知,猜测是win10升级后,不知怎的把文件索引给删了. 解决:在tools→options→indexs→folders中,将本地所有盘符add进路径. (确定添加后,会有很长时间的扫描时间.)

Netty In Action中文版 - 第四章:Transports(传输)

本章内容 Transports(传输) NIO(non-blocking IO,New IO), OIO(Old IO,blocking IO), Local(本地), Embedded(嵌入式) Use-case(用例) APIs(接口) 网络应用程序一个非常重要的工作是数据传输. 数据传输的过程不一样取决是使用哪种交通工具,可是传输的方式是一样的:都是以字节码传输.Java开发网络程序数据传输的过程和方式是被抽象了的.我们不须要关注底层接口.仅仅须要使用Java API或其它网络框架如Net

FTP服务器 传输性能测试之Raid 1+0篇

FTP服务器  传输性能测试之Raid 1+0篇 2012年02月09日13:27 it168网站原创 作者:于泽 编辑:于泽 查看全文 赞(0)评论(1) 分享 [IT168 评测]作为日常办公最常用到的一种应用服务器,FTP服务器承担着很多工作任务,而在FTP服务器的各项性能指标中,传输效率无疑是人们关注的首要因素,在FTP服务器该做Raid 5吗?传输性能评测一文中,我们曾介绍过在Raid 5模式下,FTP服务器的传输表现.今天我们将在同样的平台下,分别对服务器做Raid 1+0.Raid

【转】Netty那点事(四)Netty与Reactor模式

[原文]https://github.com/code4craft/netty-learning/blob/master/posts/ch4-reactor.md 一:Netty.NIO.多线程? 时隔很久终于又更新了!之前一直迟迟未动也是因为积累不够,后面比较难下手.过年期间@李林锋hw发布了一个Netty5.0架构剖析和源码解读 http://vdisk.weibo.com/s/C9LV9iVqH13rW/1391437855,看完也是收获不少.前面的文章我们分析了Netty的结构,这次咱们