伪异步i/o模型
伪异步i/o模型
泡海椒 发表于2年前
伪异步i/o模型
  • 发表于 2年前
  • 阅读 13
  • 收藏 0
  • 点赞 1
  • 评论 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;
            }

        }
    }

}

共有 人打赏支持
粉丝 11
博文 249
码字总数 272271
×
泡海椒
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: