02.GO语言入门程序

[TOC]前言在执行GO语言时需要先安装一个SDKGo 安装包下载Windows系统只需要下载对应版本的以.msi后缀结尾的文件即可。安装完成后自动加入环境变量,不需要手动配置。安装过程很简单本文就不在赘述。安装完成后打开cmd查看是否安装成功go version一、第一个GO程序需求:在控制台输出"Hello World!"package main // 声明 main 包 import "fmt" // 导入 fmt 包,打印字符串时需要用到 func main() { // 声明 main 主函数 fmt.Println("...

GO 2022-06-27 PM 17℃ 0条

01.GO语言介绍

[TOC]前言在开始本篇之前先上一张表情包:GO语言的吉祥物是一只地鼠(gopher)。一、简介Go语言又称为Golang是Google于2009年正式发布的一款开源的静态编译型编程语言,Go拥有构建简单、可靠和高效的特性。主要目标是“兼具Python 等动态语言的开发速度和C/C++等编译型语言的性能与安全性”,旨在不损失应用程序性能的情况下降低代码的复杂性。很多公司,特别是中国的互联网公司,即将或者已经完成了使用 Go 语言改造旧系统的过程。经过 Go 语言重构的系统能使用更少的硬件资源获得更高的并发和I/O吞吐表现。充分挖掘硬件设备的潜力也满足当前精细化运营的市场大环境。Go语言的...

GO 2022-06-26 PM 22℃ 1条

04.Netty源码分析之启动流程分析

[TOC]一、NIO启动流程Netty底层是NIO,从对NIO的组件封装开始进行分析。本次对Netty的分析主要是在源码中找到下方NIO的方法,来看看netty中对下面的代码是怎样进行处理的//1 netty 中使用 NioEventLoopGroup (简称 nio boss 线程)来封装线程和 selector //可以同时监听多个channel上的读和写事件 Selector selector = Selector.open(); //2 创建 NioServerSocketChannel,同时会初始化它关联的 handler,以及为原生 ssc 存储 config NioSe...

Java 2022-06-24 PM 13℃ 0条

03.Netty搭建RPC框架

[TOC]一、概述RPC的目的,让分布式或者微服务系统中不同服务之间的调用(远程调用)像本地调用一样简单,调用者感知不到远程调用的逻辑。二、目的客户端向服务端发送请求,调用HelloService接口中的sayHello方法,最后服务端将结果返回给客户端HelloService接口public interface HelloService { String sayHello(String name); }HelloServiceImpl接口实现类public class HelloServiceImpl implements HelloService { @Overrid...

Java 2022-06-23 PM 25℃ 0条

02.Netty优化之参数调优

[TOC](1) CONNECT_TIMEOUT_MILLIS属于 SocketChannal 的参数用在客户端建立连接时,如果在指定毫秒内无法连接,会抛出 timeout 异常注意:Netty 中不要用成了SO_TIMEOUT 主要用在阻塞 IO,而 Netty 是非阻塞 IO示例import io.netty.bootstrap.Bootstrap; import io.netty.channel.ChannelFuture; import io.netty.channel.ChannelInitializer; import io.netty.channel.ChannelOpti...

Java 2022-06-22 PM 23℃ 0条

01.Netty优化之扩展序列化算法

[TOC]一、概念序列化最终的目的是为了对象可以跨平台存储和进行网络传输,而一般进行跨平台存储和网络传输的方式就是 IO,而 IO 支持的数据格式就是字节数组。将对象转成字节数组的时候需要制定一种规则,这种规则就是序列化机制。序列化和反序列化概述序列化:就是把对象转化为可传输的字节序列过程;反序列化:就是把字节序列还原为对象的过程。二、常见序列化方式序列化只是定义了拆解对象的具体规则,那这种规则肯定也是多种多样的,比如现在常见的序列化方式有:JDK 原生、JSON、ProtoBuf、Hessian、Kryo等。JDK原生作为一个成熟的编程语言,JDK自带了序列化方法。只需要类实现了Ser...

Java 2022-06-21 PM 31℃ 0条

07.Netty进阶之聊天室案例

[TOC]一、聊天室业务介绍用户管理接口/** * 用户管理接口 */ public interface UserService { /** * 登录 * @param username 用户名 * @param password 密码 * @return 登录成功返回 true, 否则返回 false */ boolean login(String username, String password); }会话管理接口import io.netty.channel.Channel; /** * 会话管理接口 ...

Java 2022-06-20 PM 31℃ 0条

06.Netty进阶之Sharable注解

[TOC]一、@Sharable概述表示可以将带注释的 ChannelHandler 的同一个实例多次添加到一个或多个 ChannelPipelines 中,而不会出现竞争条件。如果未指定此注解,则每次将其添加到管道时都必须创建一个新的处理程序实例,因为它具有成员变量等非共享状态。(这个是Netty的官方给的说明)简单的理解:@Sharable是用来修饰ChannelHandler的ChannelHandler单例模式下需要添加多个ChannelPipelines 也就是要拦截多个Channel,就需要使用到@Sharable来修饰ChannelHandler二、示例验证在Netty中添...

Java 2022-06-20 AM 32℃ 0条

05.Netty进阶之自定义协议

[TOC]一、网络协议基本要素魔数魔数是通信双方协商的一个暗号,通常采用固定的几个字节表示。魔数的作用是防止任何人随便向服务器的端口上发送数据。服务端在接收到数据时会解析出前几个固定字节的魔数,然后做正确性比对。如果和约定的魔数不匹配,则认为是非法数据,可以直接关闭连接或者采取其他措施以增强系统的安全防护。魔数的思想在压缩算法、Java Class 文件等场景中都有所体现,例如 Class 文件开头就存储了魔数 0xCAFEBABE,在加载 Class 文件时首先会验证魔数的正确性。协议版本号随着业务需求的变化,协议可能需要对结构或字段进行改动,不同版本的协议对应的解析方法也是不同的。所...

Java 2022-06-16 PM 50℃ 0条

04.Netty进阶之协议设计与解析

[TOC]前言小故事很久很久以前,一位私塾先生到一家任教。双方签订了一纸协议:“无鸡鸭亦可无鱼肉亦可白菜豆腐不可少不得束修金”。此后,私塾先生虽然认真教课,但主人家则总是给私塾先生以白菜豆腐为菜,丝毫未见鸡鸭鱼肉的款待。私塾先生先是很不解,可是后来也就想通了:主人把鸡鸭鱼肉的钱都会换为束修金的,也罢。至此双方相安无事。年关将至,一个学年段亦告结束。私塾先生临行时,也不见主人家为他交付束修金,遂与主家理论。然主家亦振振有词:“有协议为证——无鸡鸭亦可,无鱼肉亦可,白菜豆腐不可少,不得束修金。这白纸黑字明摆着的,你有什么要说的呢?”私塾先生据理力争:“协议是这样的——无鸡,鸭亦可;无鱼,肉亦...

Java 2022-06-16 PM 52℃ 0条