在面对不少当前的互联网应用程序时,其核心底层功能大多须要高性能网络编程来支撑,而对于Java来讲是幸运的,由于在这个领域已经有了一个正在不断健壮的框架,他就是Netty(一款异步的事件驱动的网络应用程序框架,支持快速地开发可维护的高性能的面向协议的服务器和客户端)。java
那么这个框架入手容易吗?git
实际上是有必定难度的,即便是一些例子(具有高性能的系统),想要了解并熟知,不只须要一流的编程技巧,还须要几个复杂领域(网络编程、多线程处理和并发)的专业知识。github
可是Netty确实提供了极为丰富的网络编程工具集,值得咱们花大量时间来消化它。编程
Netty的架构方法和设计原则是:每一个小点都和它的技术性内容同样重要,无比精妙。咱们能够更关注如下几点:安全
关注点分离——业务和网络逻辑解耦
模块化和可复用性
可测试性做为首要的要求
代码示例 阻塞I/O
ServerSocket serversocket = new ServerSocket(portNumber); Socket clientSocket = serverSocket.accept(); BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true); String request, response; while((request = in.readLine()) != null){ if("Done".equals(request)){ break; } response = processRequest(request); out.println(response); }
恰如以上代码就实现了Socket API的基本模式之一。或许你应该注意到如下几点:服务器
这段代码是否存在弊端?
那么你或许能够考虑到如下几点影响?
结论是?
虽然以上对于支撑中小数量的客户端来讲还算能够接受,可是在面对100 000或更多并发链接资源使用它是很不理想的。网络
很幸运,你还可使用NIO这种方式!(2002年Java引入对于非阻塞I/O的支持)
使用Selector的非阻塞I/O
相比之下,与阻塞I/O相比,它能更好的利用资源
尽管你能够直接使用这些API进行直接构建应用程序(在高负载下可靠和高效的处理和调度I/O操做),可是要作到彻底正确与安全是很难处理,那么这是咱们将工做留给高性能的网络编程专家Netty或许更合适。多线程
项目名:InChat
项目地址:https://github.com/UncleCatMy...
项目介绍:基于Netty4与SpringBoot,聊天室WebSocket(文字图片)加API调用Netty长连接执行发送消息(在线数、用户列表)、Iot物联网-MQTT协议、TCP/IP协议单片机通讯,异步存储聊天数据架构
若是本文对你有所帮助,欢迎关注我的技术公众号并发