随笔分类 - JAVA / IO&Netty(网络编程)
摘要:一、Netty和网络通信 (一)Netty框架简介 1、BIO 存在性能问题、可靠性问题、可维护性问题 BIO的核心问题是同步阻塞 public void service() throws IOException { ServerSocket serverSocket = new S
阅读全文
摘要:一、再谈谈什么是高性能 (一)性能指标与演示 首先明确一下,高性能涵盖:高并发用户、高吞吐量、低延迟、容量四个方面,高并发用户是指可以承载海量的并发用户,例如十万个、百万个用户同时连接和并发访问,不会造成系统崩溃;吞吐量就是我们常说的TPS、QPS,即每秒的查询数和事务数;低延时指的是请求的响应速度
阅读全文
摘要:一、基础代码 首先使用BIO单线程、BIO多线程、BIO线程池的方式启动端口为8080、8081、8082三个服务,为后续做准备,同时编写客户端调用,使用HttpClient和OkHttpClient来分别调用。 1、BIO模式单线程模式 public class HttpServer01 { pu
阅读全文
摘要:一、Netty实现Dubbo RPC (一)RPC 基本介绍 RPC(Remote Procedure Call)—远程过程调⽤,是⼀个计算机通信协议。该协议允许运⾏于⼀台计算机的程序调⽤另⼀台计算机的⼦程序,⽽程序员⽆需额外地为这个交互作⽤编程两个或多个应⽤程序都分布在不同的服务器上,它们之间的调
阅读全文
摘要:一、异步任务调度 (一)为什么要使用异步任务调度 先写一个简单的Netty程序: 1、NettyServer public class NettyServer { public static void main(String[] args) { //1. 创建两个线程组 bossGroup 和 wo
阅读全文
摘要:一、Netty编解码器 (一)Netty编解码器概述 1、Java的编解码 在Java中编码(Encode)称为序列化, 它将对象序列化为字节数组,⽤于⽹络传输、数据持久化或者其它⽤途。解码(Decode)称为反序列化,它把从⽹络、磁盘等读取的字节数组还原成原始对象(通常是原始对象的拷⻉),以⽅便后
阅读全文
摘要:一、代码示例 下面是简单的Netty代码示例代码示例,核心模块在其中均有体现,后续的模块组件都以该代码作为示例。 1、Server public class NettyServer { public static void main(String[] args) { //创建BossGroup 和
阅读全文
摘要:一、群聊系统 实例要求: 1、编写⼀个 Netty 群聊系统,实现服务器端和客户端之间的数据简单通讯(⾮阻塞) 2、实现多⼈群聊 3、服务器端:可以监测⽤户上线,离线,并实现消息转发功能 4、客户端:通过 channel 可以⽆阻塞发送消息给其它所有⽤户,同时可以接受其它⽤户发送的消息(有服务器转发
阅读全文
摘要:一、Netty概述 (一)Netty是什么 Netty 是由 JBOSS 提供的⼀个 Java 开源框架,现为 Github 上的独⽴项⽬。 Netty 是⼀个异步的、基于事件驱动的⽹络应⽤框架,⽤以快速开发⾼性能、⾼可靠性的⽹络 IO程序。 Netty 主要针对在 TCP 协议下,⾯向 Clien
阅读全文
摘要:一、IO模型 IO在计算机中指Input/Output,也就是输⼊和输出。 (一)内核空间与用户空间 在计算机中,将空间分为内核空间(Kernel-space)和⽤户空间(User-space)。 在 Linux 系统中,内核模块运⾏在内核空间,对应的进程处于内核态;⽽⽤户程序运⾏在⽤户空间,对应的
阅读全文
摘要:一、零拷贝和NIO (一)零拷贝综述 零拷⻉是⽹络编程的关键,很多性能优化都离不开。 零拷⻉(Zero-copy)技术指在计算机执⾏操作时,CPU 不需要先将数据从⼀个内存区域复制到另⼀个内存区域,从⽽可以减少上下⽂切换以及 CPU 的拷⻉时间。它的作⽤是在数据从⽹络设备到⽤户程序空间传递的过程中,
阅读全文