Netty实例-简单的服务端-client实现,凝视具体

       书籍推荐:                                       实例代码 :http://download.csdn.net/detail/jiangtao_st/7677503

w=unionnojs&f=http%3A%2F%2Fai.taobao.com%2Fauction%2Fedetail.htm%3Fe%3DNwfw%252Fe17lVwjmraEDZVrLn4D8gsQRSnlTCbL1Om%252BR1KLltG5xFicOdXrTUTgh9sMDPIwxrc30rhSWkknj6ZtyddMKr6k2rzZWTzGpWlbfZAnZymzZ1oZjeIZWR1bMnHu%26unid%3D28416740%26ptype%3D100010%26from%3Dbasic&k=5ccfdb950740ca16&c=un&b=alimm_0&p=mm_28416740_6610563_22760419">

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvamlhbmd0YW9fc3Q=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" >

  1. Netty Server端实现

    /**
     *
     * <p>
     * 	Netty Server Simple
     * </p>
     *
     * @author 卓轩
     * @创建时间:2014年7月7日
     * @version: V1.0
     */
    
    public class NettyServer {
    
    	private final int port = 8989;
    
    	@Test
    	public void nettyServer(){
    
    		EventLoopGroup bossGroup = new NioEventLoopGroup();
    		EventLoopGroup workerGroup = new NioEventLoopGroup();
    
    		try {
    			ServerBootstrap serverBootstrap = new ServerBootstrap();
    			serverBootstrap.group(bossGroup,workerGroup)
    				.channel(NioServerSocketChannel.class)
    				.option(ChannelOption.SO_BACKLOG, 1024)
    				.childHandler(new ChildChannelHandler());
    
    			//绑定端口、同步等待
    			ChannelFuture futrue = serverBootstrap.bind(port).sync();
    
    			//等待服务监听端口关闭
    			futrue.channel().closeFuture().sync();
    		} catch (InterruptedException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}finally{
    			//退出,释放线程等相关资源
    			bossGroup.shutdownGracefully();
    			workerGroup.shutdownGracefully();
    		}
    
    	}
    
    	private class ChildChannelHandler extends ChannelInitializer<SocketChannel>{
    		@Override
    		protected void initChannel(SocketChannel ch) throws Exception {
    
    			ch.pipeline().addLast(new SimpleServerHandler());
    		}
    	}
    
    }
    
  2. Netty Client 实现

    /**
     *
     * <p>
     * 	NettyClient  实现
     * </p>
     *
     * @author 卓轩
     * @创建时间:2014年7月7日
     * @version: V1.0
     */
    public class NettyClient {
    
    	public void connect(int port,String host){
    
    		EventLoopGroup group = new NioEventLoopGroup();
    
    		try {
    			Bootstrap bootstrap = new Bootstrap();
    			bootstrap.group(group)
    			.channel(NioSocketChannel.class)
    			.option(ChannelOption.TCP_NODELAY, true)
    			.handler(new ChannelInitializer<SocketChannel>() {
    
    				@Override
    				protected void initChannel(SocketChannel ch) throws Exception {
    					ch.pipeline().addLast(new SimpleClientHandler());
    				}
    			});
    			//发起异步链接操作
    			ChannelFuture channelFuture = bootstrap.connect(host, port).sync();
    
    			channelFuture.channel().closeFuture().sync();
    		} catch (InterruptedException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}finally{
    			//关闭,释放线程资源
    			group.shutdownGracefully();
    		}
    	}
    
    	@Test
    	public void nettyClient(){
    
    		new NettyClient().connect(8989, "localhost");
    	}
    
    }
  3. ServerHander 处理程序 

    /**
     *
     * <p>
     * 	Server接收消息处理Handler
     * </p>
     *
     * @author 卓轩
     * @创建时间:2014年7月7日
     * @version: V1.0
     */
    public class SimpleServerHandler extends ChannelInboundHandlerAdapter {
    
    	@Override
    	public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
    
    		ByteBuf buf = (ByteBuf)msg;
    		byte [] req = new byte[buf.readableBytes()];
    
    		buf.readBytes(req);
    
    		String message = new String(req,"UTF-8");
    
    		System.out.println("Netty-Server:Receive Message,"+ message);
    
    	}
    }
  4. ClientHander 处理程序

    /**
     *
     * <p>
     * Client Handler
     * </p>
     *
     * @author 卓轩
     * @创建时间:2014年7月7日
     * @version: V1.0
     */
    public class SimpleClientHandler extends ChannelInboundHandlerAdapter {
    
    	private ByteBuf clientMessage;
    
    	public SimpleClientHandler() {
    
    		byte [] req = "Call-User-Service".getBytes();
    		clientMessage = Unpooled.buffer(req.length);
    		clientMessage.writeBytes(req);
    	}
    
    	@Override
    	public void channelActive(ChannelHandlerContext ctx) throws Exception {
    
    		ctx.writeAndFlush(clientMessage);
    
    	}
    
    	@Override
    	public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
    		ByteBuf buf = (ByteBuf)msg;
    		byte [] req = new byte[buf.readableBytes()];
    
    		buf.readBytes(req);
    
    		String message = new String(req,"UTF-8");
    
    		System.out.println("Netty-Client:Receive Message,"+ message);
    	}
    
    	@Override
    	public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
    
    		ctx.close();
    	}
    }
时间: 2024-10-07 11:27:39

Netty实例-简单的服务端-client实现,凝视具体的相关文章

Netty实例-简单的服务端-客户端实现,注释详细

       书籍推荐:                                       实例代码 :http://download.csdn.net/detail/jiangtao_st/7677503 Netty Server端实现 /** * * <p> * Netty Server Simple * </p> * * @author 卓轩 * @创建时间:2014年7月7日 * @version: V1.0 */ public class NettyServer

实例PK(Vue服务端渲染 VS Vue浏览器端渲染)

Vue 2.0 开始支持服务端渲染的功能,所以本文章也是基于vue 2.0以上版本.网上对于服务端渲染的资料还是比较少,最经典的莫过于Vue作者尤雨溪大神的 vue-hacker-news.本人在公司做Vue项目的时候,一直苦于产品.客户对首屏加载要求,SEO的诉求,也想过很多解决方案,本次也是针对浏览器渲染不足之处,采用了服务端渲染,并且做了两个一样的Demo作为比较,更能直观的对比Vue前后端的渲染. 话不多说,我们分别来看两个Demo:(欢迎star 欢迎pull request) 1.浏

socket编程,简单多线程服务端测试程序

socket编程,简单多线程服务端测试程序 前些天重温了MSDN关于socket编程的WSAStartup.WSACleanup.socket.closesocket.bind.listen.accept.recv.send等函数的介绍,今天写了一个CUI界面的测试程序(依赖MFC)作为补充.程序功能简介如下: 1:一个线程做监听用. 2:监听线程收到客户端连接后,创建新线程接收客户端数据.所有对客户端线程将加入容器,以便管理. 3:服务端打印所有客户端发来的信息. 4:服务端CUI界面输入数字

书剑恩仇录online全套源代码(服务端+client+文档)

书剑恩仇录online全套源代码(服务端+client+文档).vc++开发,解压后将近10G大小,眼下网上最完整版本号,包括client源代码.服务端源代码.工具源代码.sdk.文档-- <书剑恩仇录>是依据同名小说改编的3D大型网游,由国内麒麟游戏200名精英研发人员倾情打造. 麒麟游戏在<书剑恩仇录>改编网游的过程中.以原著小说情节为线索展开游戏剧情,利用率先的自主研发引擎技术,在江南武林帮会红花会与清廷斗争的时空背景下,细腻刻画了原著中陈家洛与香香公主的爱恨情仇,以及快意江

GCDAynscSocket简单使用-服务端

距离上次写<GCDAynscSocket简单使用-服务端>差不多一个月了,现在把服务端的介绍给补上. 服务端的介绍比较简单,因为服务端和客户端的接收和发送数据的方法是一样的,不同的地方在于服务端是开启一个服务被动的等待客户端的接入.所以只介绍一下如何开启和关闭服务. 1.开启服务 GCDAynscSocket封装的非常好了,大部分情况下我们只要调用它的接口就可以了. 开启服务可调用的方法: /** * Tells the socket to begin listening and accept

转:实现一个简单的服务端推送方案

原文来自于:http://blog.csdn.net/jiao_fuyou/article/details/17090355 客户端和服务端的交互有推和拉两种方式:如果是客户端拉的话,通常就是Polling:如果是服务端推的话,一般就是Comet,目前比较流行的Comet实现方式是Long Polling. 注:如果不清楚相关名词含义,可以参考:Browser 與 Server 持續同步的作法介紹. 先来看看Polling,它其实就是我们平常所说的轮询,大致如下所示: Polling 因为服务端

Netty实现客户端和服务端通信简单例子

Netty是建立在NIO基础之上,Netty在NIO之上又提供了更高层次的抽象. 在Netty里面,Accept连接可以使用单独的线程池去处理,读写操作又是另外的线程池来处理. Accept连接和读写操作也可以使用同一个线程池来进行处理.而请求处理逻辑既可以使用单独的线程池进行处理,也可以跟放在读写线程一块处理.线程池中的每一个线程都是NIO线程.用户可以根据实际情况进行组装,构造出满足系统需求的并发模型. Netty提供了内置的常用编解码器,包括行编解码器[一行一个请求],前缀长度编解码器[前

(二)Netty学习笔记之服务端启动

本文将不会对netty中每个点分类讲解,而是一个服务端启动的代码走读,在这个过程中再去了解和学习,这也是博主自己的学习历程.下面开始正文~~~~ 众所周知,在写netty服务端应用的时候一般会有这样的启动代码: (代码一) 1 EventLoopGroup bossGroup = new NioEventLoopGroup(1); 2 EventLoopGroup workerGroup = new NioEventLoopGroup(); 3 try { 4 ServerBootstrap b

socket基础实例(一个服务端对应一个客户端情形)

服务端处理1个客户端的例子 运行结果: 执行服务端进程: [[email protected] single_link]# ./server [server]: begin [server]: loop...... [server]: client[127.0.0.138528] is connected [server]: recv from client[127.0.0.1:38528]: data=12345, len=1024 [server]: send to client[127.0