netty传输对象

4 篇文章 0 订阅
3 篇文章 0 订阅

在netty简单实例   基础上,修改代码,使其能够传输对象。

首先:

sever和client的编码、解码handler需要修改。因为netty只支持字符流传输,所以需要我们将对象转换为字符流,修改如下:

server端:

		bootstrap.setPipelineFactory(new ChannelPipelineFactory() {
			public ChannelPipeline getPipeline() throws Exception {
				
				/*典型的过滤式处理*/
				ChannelPipeline pipeline = Channels.pipeline();
//				pipeline.addLast("encode", new StringEncoder());
//				pipeline.addLast("decode", new StringDecoder());
				/*添加自定义的handler,对请求进行处理*/
				pipeline.addLast("encode", new ObjectEncoder());
				pipeline.addLast("decode", new ObjectDecoder(ClassResolvers.cacheDisabled(this
		                .getClass().getClassLoader())));
				pipeline.addLast("handler", handler);
				return pipeline;
			}
		});

client端:

		bootstrap.setPipelineFactory(new ChannelPipelineFactory() {
			public ChannelPipeline getPipeline() throws Exception {
				ChannelPipeline pipeline = Channels.pipeline();
				//channelPipeline.addLast("encode", new StringEncoder());
				//channelPipeline.addLast("decode", new StringDecoder());
				
				pipeline.addLast("encode", new ObjectEncoder());
				pipeline.addLast("decode", new ObjectDecoder(ClassResolvers.cacheDisabled(this
		                .getClass().getClassLoader())));
				pipeline.addLast("handler", handler);
				
				return pipeline;
			}
		});

其次:

client and server handler need to rewrite,for exaple:

ServerObjectHandler:

public class ServerObjectHandler extends SimpleChannelHandler {

	public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) throws Exception {
		People people = (People) e.getMessage();
		System.out.println("" + new Date().toString());
		System.out.println("get one info:"+"\n" + "   name:" + people.getName() + "\n"
				                                + "    age:" +people.getAge() + "\n"
				                                + "address:" + people.getAddress() + "\n"); 
		Channel ch = e.getChannel();
		//String string = "server has got the object";
		Object object ="server has got the object";
		ch.write(object);
	}
}

clientObjectHandler:

public class ClientObjectHandler extends SimpleChannelHandler {

	public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) throws Exception {
		
		Object object = e.getMessage();
		System.out.println("Get message:" +"\n"+"\n");
		System.out.println("" + new Date().toString() + "\n" +
				"***************" +
				object.toString() +
				"***************");
	}
}

last:

the object whitch will be sended, is :


public class People implements Serializable {
	private static final long serialVersionUID = 1L;
	private String name;
	private String age;
	private String address;
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}

	public String getAddress() {
		return address;
	}
	public void setAddress(String address) {
		this.address = address;
	}
	public String getAge() {
		return age;
	}
	public void setAge(String age) {
		this.age = age;
	}
}

 And the config will be changed,for exaple:

spring-client.xml

   <bean id="clientThread" class="com.netboy.netty.client.ClientThread" >
	    <property name="nettyClient" ref="nettyClient" />
	</bean>

    <bean id="objectThread" class="com.netboy.netty.client.ObjectThread" >
	    <property name="nettyClient" ref="nettyClient" />
	</bean>    
    
	<bean id="nettyClient" class="com.netboy.netty.client.NettyClient" >
	    <property name="host" value="127.0.0.1" />
	    <property name="port" value="8080" />
	    <property name="handler" ref="clientObjectHandler" />
	</bean>
	    
    <bean id="clientHandler" class="com.netboy.netty.handler.ClientHandler" />
    <bean id="clientObjectHandler" class="com.netboy.netty.handler.ClientObjectHandler" />

spring-server.xml:

	<bean id="nettyServer" class="com.netboy.netty.server.NettyServer" >
	    <property name="port" value="8080" />
	    <property name="handler" ref="objectHandler" />
	</bean>

    <bean id="serverHandler" class="com.netboy.netty.handler.ServerHandler" />
 	<bean id="objectHandler" class="com.netboy.netty.handler.ServerObjectHandler" />

last:

    first run  server,then run client


**********************************************************************************************************************************************************************************


**********************************************************************************************************************************************************************************


OK , clink there ,you can get the code resource:源码资源





  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值