一般堵塞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显然无法满足高性能,高并发现场访问。

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

最新文章

  1. [linux] scp无密码拷贝
  2. 转来的emacs配置文件,自动安装插件
  3. HDU 5122 K.Bro Sorting(2014北京区域赛现场赛K题 模拟)
  4. ADF_Data Binding系列3_使用Placeholder Data Control
  5. [C++] zlatlcv: ATL字符串转换辅助库。能很方便的将UTF-8字符串转为TCHAR等字符串
  6. UVALive 6263 The Dragon and the knights --统计,直线分平面
  7. 天使投资、VC 以及 PE 的区别是什么?
  8. C:预编译指令
  9. 超简单的卸载ORACLE 11g
  10. Google Java 风格 阅读随笔
  11. 关于在HTML中使用的script标签
  12. git submodule 删除及更新URL 转载的
  13. tensorflow (七) k-means
  14. Android为TV端助力 转载:android MVC设计模式
  15. Confluence 6 为空白空间重置原始默认内容
  16. 2015-10-06 认识jQuery1
  17. PHP 用 fsockopen()、fputs() 来请求一个 URL,不要求返回
  18. LOJ6089 小Y的背包计数问题 背包、根号分治
  19. shell script中read的用法
  20. Django商城项目笔记No.12用户部分-QQ登录2获取QQ用户openid

热门文章

  1. android-包签名
  2. like-minded 都有什么意思_百度知道
  3. poj 1659 Frogs' Neighborhood (度序列)
  4. IDEA系统提示中文乱码问题及解决
  5. Phalcon之 表单(Forms)
  6. poj2777--Count Color(线段树,二进制转化)
  7. 我的EJB学习历程
  8. I2C操作笔记——以 AT24C04为例
  9. Python数据结构-序表
  10. 查看mysql一些命令的数据库状态