java netty简单使用
来源:互联网 发布:matlab nan数据变为0 编辑:程序博客网 时间:2024/06/06 02:15
NioServerSocketChannelFactory创建服务端的ServerSocketChannel,采用多线程执行非阻塞IO,和Mina的设计
模式一样,都采用了Reactor模式。其中bossExecutor、workerExecutor是两个线程池,bossExecutor用来接收客户端连接,
workerExecutor用来执行非阻塞的IO操作,主要是read,write。
使用到的jar
<dependency>
<groupId>org.jboss.netty</groupId>
<artifactId>netty</artifactId>
<version>3.2.9.Final</version>
</dependency>
</dependencies>
import java.net.InetSocketAddress;import java.util.concurrent.Executors;import org.jboss.netty.bootstrap.ServerBootstrap;import org.jboss.netty.channel.ChannelHandlerContext;import org.jboss.netty.channel.ChannelPipeline;import org.jboss.netty.channel.ChannelPipelineFactory;import org.jboss.netty.channel.ChannelStateEvent;import org.jboss.netty.channel.Channels;import org.jboss.netty.channel.ExceptionEvent;import org.jboss.netty.channel.MessageEvent;import org.jboss.netty.channel.SimpleChannelHandler;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 DiscardServer {public static void main(String[] args) {// Server服务启动器ServerBootstrap bootstrap = new ServerBootstrap(new NioServerSocketChannelFactory(Executors.newCachedThreadPool(),Executors.newCachedThreadPool()));// 设置一个处理客户端消息和各种消息事件的类(Handler)bootstrap.setPipelineFactory(new ChannelPipelineFactory() {@Overridepublic ChannelPipeline getPipeline() throws Exception {ChannelPipeline pipeline = Channels.pipeline(); pipeline.addLast("encode",new StringEncoder()); pipeline.addLast("decode",new StringDecoder()); pipeline.addLast("handler",new HelloServerHandler()); return pipeline;}});// 开放8000端口供客户端访问。bootstrap.bind(new InetSocketAddress(8000));}private static class HelloServerHandler extends SimpleChannelHandler {/** * 当有客户端绑定到服务端的时候触发,打印"Hello world, I'm server." * * @alia OneCoder * @author lihzh */@Overridepublic void channelConnected(ChannelHandlerContext ctx,ChannelStateEvent e) {System.out.println("Hello world, I'm server.");}@Overridepublic void messageReceived(ChannelHandlerContext ctx, MessageEvent e)throws Exception {String message = (String) e.getMessage();System.out.println(message);e.getChannel().close();}@Overridepublic void exceptionCaught(ChannelHandlerContext ctx, ExceptionEvent e)throws Exception {System.out.println("服务端异常"+e.getCause());e.getChannel().close();}}}
public class HelloClient { // Client服务启动器 private static ClientBootstrap bootstrap = new ClientBootstrap( new NioClientSocketChannelFactory( Executors.newCachedThreadPool(), Executors.newCachedThreadPool())); public static int i=0;public static void main(String args[]) throws InterruptedException { while(true) { // 设置一个处理服务端消息和各种消息事件的类(Handler) bootstrap.setPipelineFactory(new ChannelPipelineFactory() { @Override public ChannelPipeline getPipeline() throws Exception { ChannelPipeline pipeline = Channels.pipeline(); pipeline.addLast("encode",new StringEncoder()); pipeline.addLast("decode",new StringDecoder()); pipeline.addLast("handler",new HelloClientHandler()); return pipeline; } }); // 连接到本地的8000端口的服务端 bootstrap.connect(new InetSocketAddress( "127.0.0.1", 8000)); System.out.println("计数:"+(i++));} } private static class HelloClientHandler extends SimpleChannelHandler { @Overridepublic void exceptionCaught(ChannelHandlerContext ctx, ExceptionEvent e)throws Exception { System.out.println("客服端---"+e.getCause());}/** * 当绑定到服务端的时候触发,打印"Hello world, I'm client." * * @alia OneCoder * @author lihzh */ @Override public void channelConnected(ChannelHandlerContext ctx, ChannelStateEvent e) { e.getChannel().write("xxxxxxxxxxxxx"); }@Overridepublic void messageReceived(ChannelHandlerContext ctx, MessageEvent e)throws Exception { e.getChannel().close();} } }
0 0
- java netty简单使用
- Java NIO框架Netty简单使用
- netty简单使用
- 菜鸟Java使用Netty
- netty的简单使用实例
- java netty服务器简单例子
- 使用JAVA操作netty框架
- 使用JAVA操作netty框架
- 使用JAVA操作netty框架
- 使用JAVA操作netty框架
- 使用JAVA操作netty框架
- 使用JAVA操作netty框架
- netty使用(一):java NIO
- 使用netty开发简单样例
- 使用netty开发简单样例
- Java Netty 学习笔记(二)使用Netty编程
- java as netty protobuf使用全攻略
- java netty decoder与encoder的使用
- 逆波兰表达式求值
- curl模拟post请求提交
- TestLink 安装与使用
- 典型的数组和字符串处理代码
- Ubuntu12.04+OpenCv-2.4.9安装及简单程序编写测试
- java netty简单使用
- iOS学习之——UIButton详解
- Python SQLAlchemy MySQL ORM
- 求N!的位数
- JS使用模板快速填充HTML控件数据
- Java-输入输出基础(字节流)
- OpenCV合并图像
- JAVA笔记
- The logging tag can be at most 23 characters, was 28 (EnterpriseUnixFTPEntryParser) less... (Ctrl+F1