传统BIO

网络编程的基本模型是C/S模型(client/server),即两个进程间的通信。

服务端提供IP地址和监听端口,客户端通过连接操作想服务端监听的地址发起连接请求,通过三次握手连接,如果连接成功建立,双方就可以通过套接字进行通信。

传统的同步阻塞模型开发中,ServerSocket负责绑定IP地址,启动监听端口;Socket负责发起连接操作。连接成功后,双方通过输入和输出流进行同步阻塞式通信。

简单的描述一下BIO的服务端通信模型:采用BIO通信模型的服务端,通常由一个独立的Acceptor线程负责监听客户端的连接,它接收到客户端连接请求之后为每个客户端创建一个新的线程进行链路处理没处理完成后,通过输出流返回应答给客户端,线程销毁。请求响应模式,请求与响应比例=1:1请求----响应

传统BIO通信模型图:

该模型最大的问题就是缺乏弹性伸缩能力,当客户端并发访问量增加后,服务端的线程个数和客户端并发访问数呈1:1的正比关系,Java中的线程也是比较宝贵的系统资源,线程数量快速膨胀后,系统的性能将急剧下降,随着访问量的继续增大,系统最终就会资源耗尽,然后就是面临系统挂掉。

demo案例

服务端代码

{

;

([] ) {

();

}

( ) {

;

;

;

{

();

..();

.();

(  ) {

( (.()));

..(  .());

(.(), );

.();

}

}  ( ) {

..();

.();

}  {

(  ) {

{

.();

}  ( ) {

.();

}

}

(  ) {

.();

}

(  ) {

{

.();

}  ( ) {

.();

}

}

}

}

}

客户端代码

{

;

;

([] ) {

(, );

}

( ,  ) {

;

;

;

{

(, );

..();

( (.()));

(.(), );

.();

..(  .());

}  ( ) {

.();

}  ( ) {

.();

}  {

(  ) {

.();

}

(  ) {

{

.();

}  ( ) {

.();

}

}

(  ) {

{

.();

}  ( ) {

.();

}

}

}

}

}

启动服务端

客户端启动

相应服务端收到请求

好了,传统入门级BIO就这样了,期待升级版BIO。

java bio例子_传统的BIO相关推荐

  1. Java计算时间差_传统的SimpleDateFormat类

    Java计算时间差_传统的SimpleDateFormat类 SimpleDateFormat simpleFormat = new SimpleDateFormat("yyyy-MM-dd ...

  2. java soa例子_哪位大牛能举个实例讲下SOA与传统架构的区别?

    假设我要做几道菜: 麻婆豆腐 素炒小青菜 西红柿炒蛋 以前我的做法: 我要做麻婆豆腐,先洗豆腐,然后找到豆瓣酱,把豆瓣酱炸出香味,然后我想到还需要辣椒,我就去切辣椒,切完辣椒放进去后,我发现还需要姜蒜 ...

  3. java泛型 例子_关于 Java 泛型的一些有趣的例子

    有以下的代码: 1 try{2 ArrayList lstA = new ArrayList();3 ArrayList lstB = new ArrayList();4 5 //ArrayList ...

  4. 生活中java继承例子_简单继承例子:java

    通用类,来继承出圆和矩形. package circle; public class Geometric { private String color="white"; priva ...

  5. java抽象类例子_关于java抽象类的例子

    在网上找了很久,发现没有一个比较好的关于java抽象类的例子,刚好自己这些天在书上看到一个不错的猜数字游戏的例子,所以拿出来改进了下,希望能给你一些帮助,具体内容如下 建2个类依次为AbstractG ...

  6. java jai例子_用JAI扩展Java的图像处理能力

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 Java的图像处理能力不断地在增长,但是将一个如PNG或者JPEG格式的文件写入磁盘或从磁盘读取这样的操作仍然是一种巫术.解决方案是使用Java Adva ...

  7. java jai例子_用JAI扩展Java的图像处理能力(转)

    Java的图像处理能力不断地在增长,但是将一个如PNG或者JPEG格式的文件写入磁盘或从磁盘读取这样的操作仍然是一种巫术.解决方案是使用Java Advanced Imaging(JAI)API.JA ...

  8. java 内存例子_简单的例子 关于Java内存管理的讲解

    我想做的是,逐行读取文件,然后用该行的电影名去获取电影信息.因为源文件较大,readlines()不能完全读取所有电影名,所以我们逐行读取. 就这段代码,我想要在位置二处使用base64,然后结果呢? ...

  9. java 序列化 例子_一个简单的Java序列化的例子

    简单来说序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化,流的概念这里不用多说(就是I/O),我们可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间(注:要想将对 ...

最新文章

  1. php代码实现关键词搜索,PHP代码实现百度统计关键词及来路推送
  2. 解析:GE工业互联网平台Predix
  3. 关于系统重装的一件小事
  4. 漏洞评估的优先级决定了网络安全保护的成本
  5. 分分钟一键部署Zabbix Server
  6. 优秀技术人才需具备能力
  7. [译]Kinect for Windows SDK开发入门(八):骨骼追踪进阶 上
  8. linux7.0安装oracle乱码,Oracle Linux 7设置中文字符集
  9. 大数据在企业中的运用
  10. msfconsole漏洞扫描工具详解
  11. 番外9福冈·狂野老司机告诉你如果装AI·1· ——混合现实科幻《地与光》
  12. 运用计算机技术和语文教学,计算机信息技术与小学语文教学整合的优势
  13. 一篇文章搞定Redis Stream
  14. JS接口安全域名:XXX内容与下载文件不符,请检查文件内容或重新上传原始文件
  15. PDE优化|逆问题中偏微分方程约束优化的惩罚方法(Matlab代码实现)
  16. Mac远程控制Ubuntu黑屏
  17. js连接mqtt进行通信
  18. 《Android 开源库》 FlycoTabLayout 从头到脚
  19. 大数据分析工程师面试集锦5--Spark面试指南
  20. OpenStack Swift学习笔记

热门文章

  1. 地方门户网站如何盈利?
  2. Invalid byte 2 of 2-byte UTF-8 sequence解决方案
  3. 解决方案:PowerDesigner 16设置生成SQL column不含有collate chinese_prc_ci_as
  4. Ubuntu安装tensorflow报错:tensorflow-xx.whl not a supported wheel on this platform
  5. 2022 智能语音技术最新进展与发展趋势
  6. 年薪201万!华中科大AI博士生入选华为天才少年计划!
  7. Transformers Assemble(PART I )
  8. 找出两个字符串中所有共同的字符_面试中的两个字符串问题竟给我整懵了?!| 原力计划...
  9. wow修改人物模型_一张照片生成人物动画!三星最新AI研究成果出炉
  10. Leetcode每日一题:1370.increasing-decreasing-string(上升下降字符串)