深入学习Netty(1)——传统BIO编程 (2)

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

很明显,这种模型缺乏弹性伸缩能力,当客户端并发量增加后,线程数也随着增加,可能会造成线程堆栈溢出、创建新线程失败等问题

1.通信模型

  BIO通信模型的服务端,通常由一个独立的Acceptor线程负责监听客户客户端的连接,接收到客户端连接请求之后为每个客户端创建一个新的线程进行链路处理,处理完之后通过输出流返回应答给客户端,最后线程销毁,这是典型的一请求一应答通信模型

    

深入学习Netty(1)——传统BIO编程

2.代码实践

(1)服务端代码(代码已上传到Github)

/** * BIO通信服务端: * 由一个独立的Acceptor线程负责监听客户客户端的连接, * 接收到客户端连接请求之后为每个客户端创建一个新的线程进行链路处理, * 处理完之后通过输出流返回应答给客户端,最后线程销毁,这是典型的一请求一应答通信模型 */ public class BioServer { public static void main(String[] args) { bioServer(8082); } /** * @param port */ public static void bioServer(int port) { ServerSocket server = null; try { // ServerSocket负责绑定IP地址,启动监听端口 server = new ServerSocket(port); System.out.println("The bio server is start in port : " + port); // Socket负责发起连接操作 Socket socket = null; // 无限循环监听客户端的连接,若没有则主线程阻塞在ServerSocket的accept操作上 while (true) { socket = server.accept(); new Thread(new BioServerHandler(socket)).start(); } } catch (IOException e) { e.printStackTrace(); } finally { if (server != null) { System.out.println("The bio server close"); } try { server.close(); } catch (IOException e) { e.printStackTrace(); } server = null; } } }

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzpsyj.html