座IO理解力

座IO理解力

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

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

         来看一下堵塞IOserver的代码:

         server启动类

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();
		}
       
	}

}

处理线程类:

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.net/116915.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 深信服SCSA安全认证工程师

    深信服SCSA安全认证工程师深信服SCSA安全认证工程师考试实验环境在线学习课程讲师在线学习视频(SCSI)学员在线学习视频(SCSA)在线题库考试考试入口试卷自动批阅错题集记录联系方式微信联系18849911

    2022年6月20日
    54
  • PHP中file_exists()函数不能检测包含中文的文件名的解决办法

    PHP中file_exists()函数不能检测包含中文的文件名的解决办法

    2021年9月22日
    185
  • php常用几种设计模式的应用场景

    php常用几种设计模式的应用场景

    2021年11月6日
    36
  • mac安装pymssql遇见的问题

    mac安装pymssql遇见的问题mac安装pymssql可以直接在终端运行:pipinstallpymssqlJason-MacBook-Pro:~wangying$pipinstallpymssqlLookinginindexes:http://mirrors.aliyun.com/pypi/simple/CollectingpymssqlDownloadinghttp://mirrors.aliyun.com/pypi/packages/2e/81/99562b93d75f3fc5956fa65.

    2022年6月17日
    54
  • Windows上Nginx的安装教程详解[通俗易懂]

    不要觉得看起来简单就不去做,动手操作是另外一回事,相信我! –阿飞一 背景为了方便本地的开发和验证,于是整理了这一篇Windows上安装Nginx的博文,建议一般学习还是使用Linux,一般正规公司都是在Linux上安装Nginx服务! 本篇内容相对比较简单,如果有Linux上安装过Nginx的伙伴,那么看这一篇应该是比较轻松,而且使用也会很方便!二 下载安装包…

    2022年2月27日
    45
  • 操作系统面试题目(linux系统基础面试题)

    文章目录操作系统简介篇解释一下什么是操作系统操作系统的主要功能软件访问硬件的几种方式解释一下操作系统的主要目的是什么操作系统的种类有哪些为什么Linux系统下的应用程序不能直接在Windows下运行操作系统结构单体系统分层系统微内核客户-服务器模式为什么称为陷入内核什么是用户态和内核态用户态和内核态是如何切换的?什么是内核什么是实时系统Linux操作系统的启动过程进程和线程篇多处理系统的优势什么是进程和进程表什么是线程,线程和进程的区别什么是上下文切换使用多线程的好处是什么进程终止的方式进程的终止

    2022年4月12日
    63

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号