文档章节

伪异步i/o模型

泡海椒
 泡海椒
发布于 2016/02/17 10:35
字数 393
阅读 25
收藏 0

伪异步i/o模型
采用线程池和队列可以实现一种叫做伪异步I/O通信框架
当有新的客户接入的时候,将客户端的socket封装成为一个task 投递到后端线程池中进行处理,jdk线程池维护一个消息队列和n个活跃线程对消息的任务进行处理,由于线程池可以设置消息队列
的大小和最大的线程总数,因此资源占用可控
package paohaijiao.netty.pseudoAsynchronous;

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

import paohaijiao.netty.bio.TimerServerHandler;

public class TimeServer {

    public static void main(String[] args) throws IOException {
        
        
        int port = 8080;
        if (args != null && args.length > 0) {
            port = Integer.valueOf(args[0]);
        }
        ServerSocket server = null;
        try {
            server=new ServerSocket(port);
            System.out.println("The timer server start in port:"+port);
            Socket socket=null;
            
            TimeServerHandlerExecutePool singelExecutor=new TimeServerHandlerExecutePool(50,1000);
            while(true){
                socket=server.accept();
                new Thread(new TimerServerHandler(socket)).start();
            }
            
            
            
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally{
            if(server!=null){
                System.out.println("The timer server is close:");
                server.close();
                server=null;
                
            }
        }
        
        

    }

}
package paohaijiao.netty.pseudoAsynchronous;

import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

public class TimeServerHandlerExecutePool {
    private ExecutorService executor;

    public TimeServerHandlerExecutePool(int maxPoolsize,int queenSize) {
        
        executor=new ThreadPoolExecutor(Runtime.getRuntime().availableProcessors(),
                maxPoolsize,120L,TimeUnit.SECONDS,
                new ArrayBlockingQueue<java.lang.Runnable>(queenSize)
                );

        
    }
    
    
    public void execute(java.lang.Runnable task){
        
        executor.execute(task);
    }
}

package paohaijiao.netty.bio;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;

public class TimeClient {

    public static void main(String[] args) {

        int port = 8080;
        if (args != null && args.length > 0) {
            port = Integer.valueOf(args[0]);
        }

        Socket socket = null;
        BufferedReader in = null;
        PrintWriter out = null;
        try {
            socket = new Socket("127.0.0.1", port);
            in = new BufferedReader(new InputStreamReader(
                    socket.getInputStream()));
            out = new PrintWriter(socket.getOutputStream(), true);
            out.println("QUERY TIME ORDER");
            System.out.println("Send order 2 server succeed");
            String resp = in.readLine();
            System.out.println("Now is:" + resp);

        } catch (UnknownHostException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (in != null) {
                try {
                    in.close();
                } catch (IOException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }
            }
            if (out != null) {
                out.close();
                out = null;
            }
            if (socket != null) {
                try {
                    socket.close();
                } catch (IOException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }
                socket = null;
            }

        }
    }

}

© 著作权归作者所有

上一篇: nio服务端序列图
下一篇: activemq调优
泡海椒
粉丝 11
博文 295
码字总数 291644
作品 0
成都
程序员
私信 提问
加载中

评论(0)

Java BIO编程和伪异步I/O编程

摘自《Netty权威指南》 BIO通信模型: 问题显而易见:每个客户端都需要创建一个线程,并发访问量大时,系统会出现堆栈溢出、创建新线程失败等问题 代码演示 功能:时间服务器 服务端: 1 2 ...

osc_bc7dotjc
2019/12/05
0
0
Java BIO编程和伪异步I/O编程

摘自《Netty权威指南》 BIO通信模型: 问题显而易见:每个客户端都需要创建一个线程,并发访问量大时,系统会出现堆栈溢出、创建新线程失败等问题 代码演示 功能:时间服务器 服务端: 1 2 ...

osc_bc7dotjc
2019/12/04
0
0
网络-BIO-伪异步I/O

为了解决同步阻塞I/O面临的一个链路需要一个线程处理的问题,后来有人对它的线程模型进行了优化,后端通过一个线程池来处理多个客户端的请求接入,形成客户端个数M:线程池最大线程数N的比例...

xyh12344
2015/12/21
83
0
Java IO编程全解(六)——4种I/O的对比与选型

  转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/7804185.html   前面讲到:Java IO编程全解(五)——AIO编程   为了防止由于对一些技术概念和术语的理解或者叫法不一致而引起...

Joanna.Yan
2017/11/09
0
0
java IO NIO BIO 最权威的总结

BIO (Blocking I/O) 1.1 传统 BIO 1.2 伪异步 IO 1.3 代码示例 1.4 总结 2. NIO (New I/O) 2.1 NIO 简介 2.2 NIO的特性/NIO与IO区别 1)Non-blocking IO(非阻塞IO) 2)Buffer(缓冲区) 3)Cha......

osc_5g1gl9wp
2019/10/16
7
0

没有更多内容

加载失败,请刷新页面

加载更多

zookeeper实现分布式锁总结,看这一篇足矣(设计模式应用实战)

zk实现分布式锁纵观网络各种各样的帖子层出不穷,笔者查阅很多资料发现一个问题,有些文章只写原理并没有具体实现,有些文章虽然写了实现但是并不全面 借这个周末给大家做一个总结,代码拿来...

osc_75pcgicm
15分钟前
13
0
163邮箱配置imap和smtp,隐藏的设置

http://config.mail.163.com/settings/imap/index.jsp?uid=XXXXX@163.com,这是一个隐藏的设置,要到这里配置才能用163的imap或者pop...

bengozhong
16分钟前
13
0
Python可变对象和不可变对象

Python中一切皆对象,每个对象都有其唯一的id,对应的类型和值,其中id指的是对象在内存中的位置。根据对象的值是否可修改分为可变对象和不可变对象。其中, 不可对象包括:数字,字符串,t...

osc_pnyuctmm
17分钟前
12
0
数据库垂直拆分 水平拆分

1 数据库拆分 当我们使用读写分离、缓存后,数据库的压力还是很大的时候,这就需要使用到数据库拆分了。 数据库拆分简单来说,就是指通过某种特定的条件,按照某个维度,将我们存放在同一个数...

努力的学渣
18分钟前
22
0
微信小程序连接低功率蓝牙控制单片机上硬件设备

1.软件部分介绍   微信小程序是一种新的应用,用户不需要下载应用只用通过扫二维码或者打开链接就能使用,使用完后不需要卸载,直接关闭就行了。微信在2017年初推出微信小程序开发环境。任...

osc_uxgfefy0
18分钟前
14
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部