前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >座IO理解力

座IO理解力

作者头像
全栈程序员站长
发布2022-07-06 17:10:46
1870
发布2022-07-06 17:10:46
举报
文章被收录于专栏:全栈程序员必看

大家好,又见面了,我是全栈君

一般堵塞IO服务器通信,通常有一个单独的Acceptor线程负责监控client联系,它接收client对于每个请求连接后client分配用于处理一个新的线程,处理后。返回应答给client。线程才销毁。

来看一下堵塞IOserver的代码:

server启动类

代码语言:javascript
复制
package com.bio.demo.Server;

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

import com.bio.demo.Server.handler.TimerServerHandler;

/**
 * @author zhouxuejun
 *
 * @date 2014年10月20日 下午7:08:58
 */
public class TimeServer {
	
     public static ServerSocket server=null;
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		try {
			server=new ServerSocket(8080);
			Socket socket=null;
			while(true){
				socket=server.accept();
				new Thread(new TimerServerHandler(socket)).start();
			}
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
       
	}

}

处理线程类:

代码语言:javascript
复制
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;

/**
 * @author zhouxuejun
 *
 * @date 2014年10月20日 下午7:17:28
 */
public class TimerServerHandler implements Runnable {

	 private Socket socket;
	 public  TimerServerHandler(Socket socket) {
		// TODO Auto-generated constructor stub
		 this.socket=socket;
	}
	/* (non-Javadoc)
	 * @see java.lang.Runnable#run()
	 */
	@Override
	public void run() {
		// TODO Auto-generated method stub
      BufferedReader in=null;
      PrintWriter out=null;
      try {
		in=new BufferedReader(new InputStreamReader(this.socket.getInputStream()));
		out=new PrintWriter(this.socket.getOutputStream());
		String body=null;
		String tag=null;
		while(true){
		body=in.readLine();
		if(null==body)
			 break;
        out.print(body+"_return"); 
		}
	} catch (IOException e) {
		// TODO Auto-generated catch block
		if(null!=in){
			try {
				in.close();
			} catch (IOException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			}
		}
		if(null!=out){
			out.close();
			out=null;
		}
		if(null!=this.socket){
			try {
				this.socket.close();
			} catch (IOException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			}
			this.socket=null;
		}
		e.printStackTrace();
	}
	}

}

通过上面的代码能够看出。每当一个新的client请求过来,服务端都须要创建一个新的线程处理新接入的client请求,一个线程仅仅能处理一个client的请求。

在高性能server应用领域,往往须要面向成千上万client的并发接入。堵塞IO显然无法满足高性能,高并发现场访问。

版权声明:本文博主原创文章。博客,未经同意不得转载。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/116915.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年1月1,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档