Netty 3.x 简例

本文介绍了Netty 3.10.5版本的一个简单示例,展示了如何利用Netty这一异步、事件驱动的网络应用框架来开发高性能的客户端和服务端程序。文中给出了Server端和Client端的代码结构,包括主程序和各自的Handler实现。运行结果分别展示了Server端和Client端的日志输出。
摘要由CSDN通过智能技术生成

Netty是一个异步的、事件驱动的网络应用框架,可以用来快速开发高性的客户端、服务端程序。示例使用Netty 3.10.5

首先是Server部分的代码:

Server端主程序:

package com.sean.server;

import java.net.InetSocketAddress;
import java.util.concurrent.Executors;

import org.jboss.netty.bootstrap.ServerBootstrap;
import org.jboss.netty.channel.Channel;
import org.jboss.netty.channel.ChannelFactory;
import org.jboss.netty.channel.group.ChannelGroup;
import org.jboss.netty.channel.group.ChannelGroupFuture;
import org.jboss.netty.channel.group.DefaultChannelGroup;
import org.jboss.netty.channel.socket.nio.NioServerSocketChannelFactory;

public class Server {
	private ChannelFactory factory;
	
	public static ChannelGroup channelGroup = new DefaultChannelGroup();
	
	public void start(){
		// NioServerSocketChannelFactory用于创建基于NIO的服务端
		// ServerSocketChannel。本身包含2种线程,boss线程和worker线程。
		// 每个ServerSocketChannel会都会拥有自己的boss线程,
		// 当一个连接被服务端接受(accepted),
		// boss线程就会将接收到的Channel传递给一个worker线程处理,
		// 而worker线程以非阻塞的方式为一个或多个Channel提供非阻塞的读写
		factory = new NioServerSocketChannelFactory(
				Executors.newCachedThreadPool(),	// boss线程池
				Executors.newCachedThreadPool(),	// worker线程池
				8);	// worker线程数
		
		// ServerBootstrap用于帮助服务器启动
		ServerBootstrap bootstrap = new ServerBootstrap(factory);
		
		// 没有child.前缀,则该选项是为ServerSocketChannel设置
		bootstrap.setOption("reuseAddress", true);
		// 有child.前缀,则该选项是为Channel设置
//		bootstrap.setOption("child.tcpNoDelay", true);
//		bootstrap.setOption("child.keepAlive", true);
	
		// 对每一个连接(channel),server都会调用
		// ChannelPipelineFactory为该连接创建一个ChannelPipeline
		ServerChannelPiplineFactory channelPiplineFactory =
				new ServerChannelPiplineFactory();
		bootstrap.setPipelineFactory(channelPiplineFactory);
		
		// 这里绑定服务端监听的IP和端口
		Channel channel = bootstrap.bind(new InetSocketAddress("127.0.0.1", 8000));
		Server.channelGroup.add(channel);
		
		System.out.println("Server is started...");
	}
	
	public void stop(){
		// ChannelGroup为其管理的Channels提供一系列的批量操作
		// 关闭的Channel会自动从ChannelGroup中移除
		ChannelGroupFuture channelGroupFuture = Server.channelGroup.close();
		channelGroupFuture.awaitUninterruptibly();
		factory.releaseExternalResources();
		System.out.println("Server is stopped.");
	}

	public static void main(String[] args) throws Exception {
		Server server = new Server();
		server.start();
		Thread.sleep(30*1000);
		server.stop();
	}
}

PipelineFactory:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值