netty java 调用

之前使用过MINA框架,感觉效率非常好,使用长连接可以支持10万次以上的并发。
今天尝试使用了Netty框架,感觉使用上也非常方便,具体效率问题,在接下来的博客会详细解读:

NioServerSocketChannelFactory创建服务端的ServerSocketChannel,采用多线程执行非阻塞IO,和Mina的设计

模式一样,都采用了Reactor模式。其中bossExecutor、workerExecutor是两个线程池,bossExecutor用来接收客户端连接,workerExecutor用来执行非阻塞的IO操作,主要是read,write。

Java代码  

  1. package netty;
  2. import org.jboss.netty.bootstrap.ServerBootstrap;
  3. import org.jboss.netty.channel.ChannelFactory;
  4. import org.jboss.netty.channel.ChannelPipeline;
  5. import org.jboss.netty.channel.ChannelPipelineFactory;
  6. import org.jboss.netty.channel.Channels;
  7. import org.jboss.netty.channel.socket.nio.NioServerSocketChannelFactory;
  8. import org.jboss.netty.handler.codec.string.StringDecoder;
  9. import org.jboss.netty.handler.codec.string.StringEncoder;
  10. import java.net.InetSocketAddress;
  11. import java.util.concurrent.Executors;
  12. /**
  13. * Created by IntelliJ IDEA.
  14. * User: flychao88
  15. * Date: 12-6-6
  16. * Time: 上午10:14
  17. * To change this template use File | Settings | File Templates.
  18. */
  19. public class DiscardServer {
  20. public static void main(String[] args) throws Exception {
  21. ChannelFactory factory = new NioServerSocketChannelFactory(
  22. Executors.newCachedThreadPool(),
  23. Executors.newCachedThreadPool());
  24. ServerBootstrap bootstrap = new ServerBootstrap (factory);
  25. bootstrap.setPipelineFactory(new ChannelPipelineFactory() {
  26. public ChannelPipeline getPipeline() {
  27. ChannelPipeline pipeline = Channels.pipeline();
  28. pipeline.addLast("encode",new StringEncoder());
  29. pipeline.addLast("decode",new StringDecoder());
  30. pipeline.addLast("handler",new DiscardServerHandler());
  31. return pipeline;
  32. }
  33. });
  34. bootstrap.setOption("child.tcpNoDelay", true);
  35. bootstrap.setOption("child.keepAlive", true);
  36. bootstrap.bind(new InetSocketAddress(8080));
  37. }
  38. }

Java代码  

  1. package netty;
  2. import org.jboss.netty.buffer.ChannelBuffer;
  3. import org.jboss.netty.buffer.ChannelBuffers;
  4. import org.jboss.netty.channel.*;
  5. /**
  6. * Created by IntelliJ IDEA.
  7. * User: flychao88
  8. * Date: 12-6-6
  9. * Time: 上午10:10
  10. * To change this template use File | Settings | File Templates.
  11. */
  12. public class DiscardServerHandler extends SimpleChannelUpstreamHandler  {
  13. @Override
  14. public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) {
  15. System.out.println("服务器接收1:"+e.getMessage());
  16. }
  17. @Override
  18. public void exceptionCaught(ChannelHandlerContext ctx, ExceptionEvent e) {
  19. e.getCause().printStackTrace();
  20. Channel ch = e.getChannel();
  21. ch.close();
  22. }
  23. }

Java代码  

  1. package netty;
  2. import org.jboss.netty.bootstrap.ClientBootstrap;
  3. import org.jboss.netty.channel.ChannelFactory;
  4. import org.jboss.netty.channel.ChannelPipeline;
  5. import org.jboss.netty.channel.ChannelPipelineFactory;
  6. import org.jboss.netty.channel.Channels;
  7. import org.jboss.netty.channel.socket.nio.NioClientSocketChannelFactory;
  8. import org.jboss.netty.handler.codec.string.StringDecoder;
  9. import org.jboss.netty.handler.codec.string.StringEncoder;
  10. import java.net.InetSocketAddress;
  11. import java.util.concurrent.Executors;
  12. /**
  13. * Created by IntelliJ IDEA.
  14. * User: flychao88
  15. * Date: 12-6-6
  16. * Time: 上午10:21
  17. * To change this template use File | Settings | File Templates.
  18. */
  19. public class TimeClient {
  20. public static void main(String[] args) throws Exception {
  21. ChannelFactory factory = new NioClientSocketChannelFactory(
  22. Executors.newCachedThreadPool(),
  23. Executors.newCachedThreadPool());
  24. ClientBootstrap bootstrap = new ClientBootstrap(factory);
  25. bootstrap.setPipelineFactory(new ChannelPipelineFactory() {
  26. public ChannelPipeline getPipeline() {
  27. ChannelPipeline pipeline = Channels.pipeline();
  28. pipeline.addLast("encode",new StringEncoder());
  29. pipeline.addLast("decode",new StringDecoder());
  30. pipeline.addLast("handler",new TimeClientHandler());
  31. return pipeline;
  32. }
  33. });
  34. bootstrap.setOption("tcpNoDelay" , true);
  35. bootstrap.setOption("keepAlive", true);
  36. bootstrap.connect (new InetSocketAddress("127.0.0.1", 8080));
  37. }
  38. }

Java代码  

    1. package netty;
    2. /**
    3. * Created by IntelliJ IDEA.
    4. * User: flychao88
    5. * Date: 12-6-6
    6. * Time: 上午10:22
    7. * To change this template use File | Settings | File Templates.
    8. */
    9. import org.jboss.netty.buffer.ChannelBuffer;
    10. import org.jboss.netty.buffer.ChannelBuffers;
    11. import org.jboss.netty.channel.*;
    12. import java.util.Date;
    13. public class TimeClientHandler extends SimpleChannelUpstreamHandler  {
    14. @Override
    15. public void channelConnected(ChannelHandlerContext ctx, ChannelStateEvent e) {
    16. e.getChannel().write("abcd");
    17. }
    18. @Override
    19. public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) {
    20. e.getChannel().close();
    21. }
    22. @Override
    23. public void exceptionCaught(ChannelHandlerContext ctx, ExceptionEvent e) {
    24. e.getCause().printStackTrace();
    25. e.getChannel().close();
    26. }
时间: 2024-12-26 20:45:06

netty java 调用的相关文章

Java调用WebService 接口 实例

这里给大家介绍一下,Java调用webservice的一个实例的过程. 本项目不能运行,因为接口地址不可用. 这里只是给大家介绍一个过程,同时留作自己的笔记.如果要学习,可以参照别人的实例.比较好. ①选择项目根目录的src ,右键,new --> webservice client 然后输入地址: http://172.18.100.52:456/hello?wsdl 必须要加wsdl结尾,这样才是一个webservice的接口. finlish.这时候刷新项目.可以看到项目下/src/com

java 调用 keytool 生成keystore 和 cer 证书

keytool是一个Java数据证书的管理工具, keytool将密钥(key)和证书(certificates)存在一个称为keystore的文件中在keystore里, 包含两种数据: 密钥实体(Key entity)——密钥(secret key)又或者是私钥和配对公钥(采用非对称加密) 可信任的证书实体(trusted certificate entries)——只包含公钥 ailas(别名)每个keystore都关联这一个独一无二的alias,这个alias通常不区分大小写 下面给出一

java调用phantomjs采集ajax加载生成的网页

java调用phantomjs采集ajax加载生成的网页 日前有采集需求,当我把所有的对应页面的链接都拿到手,准备开始根据链接去采集(写爬虫爬取)对应的终端页的时候,发觉用程序获取到的数据根本没有对应的内容,可是我的浏览器看到的内容明明是有的,于是浏览器查看源代码也发觉没有,此时想起该网页应该是ajax加载的.不知道ajax的小朋友可以去学下web开发啦. 采集ajax生成的内容手段不外乎两种.一种是通过http观察加载页面时候的请求,然后我们模仿该请求去得到对应的内容,第二种则是模仿浏览器行为

Java调用Linux命令(cd的处理)

一.Java调用Linux系统的命令非常简单 这是一个非常常用的调用方法示例: 1 public String executeLinuxCmd(String cmd) { 2 System.out.println("got cmd job : " + cmd); 3 Runtime run = Runtime.getRuntime(); 4 try { 5 Process process = run.exec(cmd); 6 InputStream in = process.getIn

JAVA调用Shell脚本

在实际项目中,Java有时候需要调用C写出来的东西,除了JNI以外,我认为一种比较好的方法是JAVA调用Shell.先把C写出来的make成可执行文件,然后再写一个shell脚本执行该可执行文件,最后是JAVA调用该shell脚本. JAVA调用很简单,例子如下: 首先是shell脚本 [plain] view plain copy print? #!/bin/sh echo Begin word cluster /home/felven/word2vec/word2vec -train /ho

ndk学习17: jni之Java调用C&C++

一.Hello World 1. 定义函数原型 native关键字定义的函数即为jni函数 2.生成头文件 切换到src目录执行: (这个过程可以写脚本自动完成,比如自动拷贝到jni目录) javah -jni 包名.类名 在根目录下生成: org_bing_testjni_MainActivity.h 3. 工程中添加jni代码 工程右键->添加native code->输入名字->finish 多了如下文 新建一个Application.mk,配置相关选项(详细查看ndk有关Appl

java调用c++ dll出现中文乱码

最近的开发用到了使用java调用本机动态连接库的功能,将文件路径通过java调用C++代码对文件进行操作.在调用中如果路径中包含有中文字符就会出现问题,程序运行就会中止.下面用一个小例子,来说明记录下解决的方法. java中传入一个字符串,调用c++代码将字符串输出 public class CommonUtil { static { System.loadLibrary("nativeTest"); } public native static void Print(String s

JAVA调用C语言写的SO文件

JAVA调用C语言写的SO文件 因为工作需要写一份SO文件,作为手机硬件IC读卡和APK交互的桥梁,也就是中间件,看了网上有说到JNI接口技术实现,这里转载了一个实例 1 // 用JNI实现 2 // 实例: 3 4 // 创建HelloWorld.java 5 class HelloWorld 6 { 7 private native void print(); 8 public static void main(String[] args) 9 { 10 new HelloWorld().p

Java 调用Mysql dump 备份数据库

SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss"); try { String name = sdf.format(new Date()); String filePath = System.getProperty("user.dir") + "//" + name + ".sql"; // 系统执行器 Runtime rt = Runtime.getRu