博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
netty 管道传递
阅读量:3727 次
发布时间:2019-05-22

本文共 2872 字,大约阅读时间需要 9 分钟。

netty 管道传递

更多干货

概述

  1. 我们在使用netty的是有都会存在将channelBuffer的数据处理成相应的String或者自定义数据。而这里主要是介绍管道里面存在的上行和下行的数据处理方式

  2. 通过一张图片来看一下具体管道中的实现过程

代码

  • server

package com.server;import java.net.InetSocketAddress;import java.util.concurrent.ExecutorService;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;import org.jboss.netty.handler.codec.string.StringDecoder;import org.jboss.netty.handler.codec.string.StringEncoder;public class Server {	public static void main(String[] args) {		//服务类		ServerBootstrap bootstrap = new ServerBootstrap();		//boss线程监听端口,worker线程负责数据读写		ExecutorService boss = Executors.newCachedThreadPool();		ExecutorService worker = Executors.newCachedThreadPool();		//设置niosocket工厂		bootstrap.setFactory(new NioServerSocketChannelFactory(boss, worker));		//设置管道的工厂		bootstrap.setPipelineFactory(new ChannelPipelineFactory() {			@Override			public ChannelPipeline getPipeline() throws Exception {				ChannelPipeline pipeline = Channels.pipeline();				pipeline.addLast("handler1", new MyHandler1());				pipeline.addLast("handler2", new MyHandler2());				return pipeline;			}		});		bootstrap.bind(new InetSocketAddress(10101));		System.out.println("start!!!");	}}
  • client

package com.server;import java.net.Socket;public class Client {	public static void main(String[] args) throws Exception {		Socket socket = new Socket("127.0.0.1", 10101);		socket.getOutputStream().write("hello".getBytes());		socket.close();	}}
  • MyHandler1

package com.server;import org.jboss.netty.buffer.ChannelBuffer;import org.jboss.netty.channel.ChannelHandlerContext;import org.jboss.netty.channel.MessageEvent;import org.jboss.netty.channel.SimpleChannelHandler;import org.jboss.netty.channel.UpstreamMessageEvent;public class MyHandler1 extends SimpleChannelHandler {	@Override	public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) throws Exception {		ChannelBuffer buffer = (ChannelBuffer)e.getMessage();		byte[] array = buffer.array();		String message = new String(array);		System.out.println("handler1:" + message);		//传递		ctx.sendUpstream(new UpstreamMessageEvent(ctx.getChannel(), "abc", e.getRemoteAddress()));		ctx.sendUpstream(new UpstreamMessageEvent(ctx.getChannel(), "efg", e.getRemoteAddress()));	}}
  • MyHandler2

package com.server;import org.jboss.netty.channel.ChannelHandlerContext;import org.jboss.netty.channel.MessageEvent;import org.jboss.netty.channel.SimpleChannelHandler;public class MyHandler2 extends SimpleChannelHandler {	@Override	public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) throws Exception {		String message = (String)e.getMessage();		System.out.println("handler2:" + message);	}}

转载地址:http://vclnn.baihongyu.com/

你可能感兴趣的文章
javaUI自动化+selenium+testNG环境配置
查看>>
python+selenium自动化环境搭建
查看>>
Linux shell编程
查看>>
线程--线程池
查看>>
内存存储 -- 大小端问题
查看>>
线程池C++面向对象封装
查看>>
opencv -- 基础
查看>>
opencv--简小开发
查看>>
vs2019使用呢数据库远程连接Linux(完成版)
查看>>
01-Linux内核编程-设备和文件IO
查看>>
安装与使用说明-IDM
查看>>
1创建数据库
查看>>
狂神SSM数据库
查看>>
实现EasyExcel对Excel进行读操作(测试)
查看>>
课程分类添加功能
查看>>
教育项目课程模块2
查看>>
教育项目课程模块3(课程分类前端实现)
查看>>
课程管理需求+后端接口
查看>>
3搭建service模块
查看>>
4service_edu模块
查看>>