huaye00 2019-06-28
在面对很多当前的互联网应用程序时,其核心底层功能大多需要高性能网络编程来支撑,而对于Java来说是幸运的,因为在这个领域已经有了一个正在不断健壮的框架,他就是Netty(一款异步的事件驱动的网络应用程序框架,支持快速地开发可维护的高性能的面向协议的服务器和客户端)。
那么这个框架入手容易吗?
其实是有一定难度的,即使是一些例子(具备高性能的系统),想要了解并熟知,不仅需要一流的编程技巧,还需要几个复杂领域(网络编程、多线程处理和并发)的专业知识。
但是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协议单片机通信,异步存储聊天数据
如果本文对你有所帮助,欢迎关注个人技术公众号