BIO 处理模型 | 学习笔记

简介: 快速学习 BIO 处理模型

开发者学堂课程【 Java 高级编程BIO 处理模型】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/20/detail/430


BIO处理模型


简介:现在尽管已经实现了一个标准的网络程序开发,但是在整个的开发过程之中本程序存在有严重的性能缺陷,因为该服务器只能够为一个线程提供 Echo 服务。

如果说现在的服务器需要有多人进行连接访问的时候那么其它的使用者将无法连接等待连接)。

所以现在就可以发现单线程的服务器开发本身就是一种不合理的做法,那么此时最好的解决方案将每一个连接到服务器上的客户端都通过一个线程对象来进行处理,即:服务器上启动多个线程,每一个线程单独为每一个客户端实现 Echo 服务支持。


Echo多线程模型(BIO)


图片3.png


范例:修改服务器端程序


​​package cn.mldn.demo.server;​​

​​import java.io.PrintWriter;​​

​​import java.net.ServerSocket;​​

​​import java.net.Socket; ​​

​​import java.util.Scanner;​​

​​public class EchoServer { ​​

​​private class ClientThread implements Runnable { ​​

​​private Socket client = null ;// 描述每-一个不同的客户端​​

​​private Scanner scan = nu11 ;​​

​​private PrintStream out = null ;​​

​​public ClientThread(Socket client) throws Exception { ​​

​​this.client = client ;​​

​​this.scan = new Scanner(client. getInputStream()) ; // 客户端输入流this. scan.useDelimiter("\n") ; //设置分隔符​​

​​ ​​

​​this.out = new PrintStream(client . getOutputStream()) ; //客户端输出流​​

​​@Override​​

​​public void run() { ​​

​​public static void main(String[] args) throws Exception { ​​

​​ServerSocket server = new ServerSocket(9999);//设置服务器端的监听端口System . out. println("等待客户端连接............");​​

​​Socket client = server .accept() ; // 有客户端连接​​

​​//首先需要先接收客户端发送来的信息,而后才可以将信息处理之后发送回客户端​​

​​boolean flag = true ; // 循环标记​​

​​/​​​​/首先需要先接收客户端发送来的信息,而后才可以将信息处理之后发送回客户端boolean flag = true ; //循环标记​​

​​boolean flag = true ; //循环标记​​

​​while (flag) { ​​

​​if(scan. hasNext()) { // 现在有数据发送​​

​​String val = scan.next(). trim() ; // 接收发送的数据if ("byebye". equalsIgnoreCase(val)) { ​​

​​out.print1n("ByeByeBye....");​​

​​flag = false ; //结束循环​​

​​} ​​

​​else { ​​

​​out.print1n(" [ECHO]" + val);​​

​​public static void main(String[] args) throws Exception f​​

​​ServerSocket server = new ServerSocket(9999) ; ​​​​//设置服务器端的监听端口​​​​ ​​

​​out.print1n("等待客​​​​​​​​​​​​​​​​接............");​​

​​//首先需要先接收客 户端发送来的信息,而后才可以将信息处理之后发送回客户端​​

​​boolean flag = true ; ​​​​//循环标记​​

​​while (flag) ​​​​{ ​​

​​Socket client = server .accept() ; ​​​​//有客户端连接​​

​​if( scan. hasNext()) ​​​​//现在有数据发送​​

​​String val = scan.next().trim() ; ​​​​//接收发送数据​​

​​if ("byebye" equalsIgnoreCase(val)) ​​​​{ ​​

​​out. println("ByeByeBye. . .");​​

​​flag = false ; // 结束循环​​

​​else f​​

​​out println(" ЕCHO + val);​​

​​scan.close();​​

​​out.close();​​

​​ ​​

​​client.close();​​

​​server .close( );​​



            </div>
相关文章
|
1月前
|
Java 视频直播 数据库连接
Java I/O 模型详解:BIO、NIO 与 AIO 的特性与应用
Java I/O 模型详解:BIO、NIO 与 AIO 的特性与应用
26 2
|
1月前
|
Java
谈谈NIO和BIO区别
谈谈NIO和BIO区别
15 0
|
12月前
|
缓存 Java Linux
NIO vs BIO模型解读
NIO vs BIO模型解读
|
JSON 网络协议 关系型数据库
计网 - 网络 I/O 模型:BIO、NIO 和 AIO 有什么区别?
计网 - 网络 I/O 模型:BIO、NIO 和 AIO 有什么区别?
99 0
|
Java
Netty - I/O模型之BIO
Netty - I/O模型之BIO
48 0
NIO同步非阻塞模型学习使用
NIO同步非阻塞模型学习使用
NIO同步非阻塞模型学习使用
|
移动开发 安全 Java
【BIO】在聊天室项目中的演化
【BIO】在聊天室项目中的演化
【BIO】在聊天室项目中的演化
|
Java Linux
NIO&AIO编程模型
NIO&AIO编程模型
195 0
|
JSON 前端开发 安全
Java网络编程IO模型 --- BIO、NIO、AIO详解
Java网络编程IO模型 --- BIO、NIO、AIO详解
321 0
Java网络编程IO模型 --- BIO、NIO、AIO详解