【协议分析】rpcx网络协议分析之tcp

前言: 最近在学习rpcx,为了更清楚搞懂rpcx的各种协议组成。对rpcx的协议做了一个深入学习。 系统: mac OS 10.14.3golang: go1.12 darwin/amd64调试工具:lldb抓包工具:tcpdump # (一)tcpdump工具使用tcpdump是一个网络抓包工具,tcpdump支持针对网络层、协议、主机、网络或端口的过滤。并提供and、or、not等逻辑语句来帮助你去掉无用的信息。tcpdump格式信息如下:参数详解 -a -- 将网络地址和广播地址转变成名...阅读全文

Segmentfault 2020-04-04 19:32:34 c_rain

【协议分析】rpcx网络协议分析之kcp数据传输

前言: KCP是一个可靠的协议,它的延迟率比起tcp低很多。在游戏和视频推流领域广泛使用。在TCP是为流量设计的(每秒内可以传输多少KB的数据),讲究的是充分利用带宽。而 KCP是为流速设计的(单个数据包从一端发送到一端需要多少时间),以10%-20%带宽浪费的代价换取了比 TCP快30%-40%的传输速度。文章中内容解析了整个kcp的传输数据数据包组成。 系统: mac OS 10.14.3golang: go1.12 darwin/amd64抓包工具:tcpdump kcp协议介绍 KCP是...阅读全文

Segmentfault 2020-04-04 16:32:33 c_rain

排查API的connection reset by peer和Timeout exceeded问题

前言 这是一次实际生产中遇到的问题,根据问题模拟反复试验。看完这部分代码,您可以直接了解backlog的工作原理,以及系统调优时该怎么调,不至于胡乱设置。 排查API的connection reset by peer问题: 晚上22点~早上6点会偶尔出现,16:00出现过一次; Client.Timeout exceeded大量出现; 分析问题原因: connection reset by peer 会有几种情况出现: 处于ESTABLISHED 、 CLOSE_WAIT 、FIN_WAIT1 ...阅读全文

Segmentfault 2020-04-04 07:32:33 c_rain

5. Go语言中的数组与切片

文章首发自公众号:Go编程时光 《Go编程时光》,一个能带你学习 Go 语言的专栏,同时欢迎搜索我的同名公众号【Go编程时光】(排版精美更适合阅读),第一时间获取Go语言干货。 系列导读 1. 一文搞定Go语言开发环境的搭建 2. Go 语言中五种变量创建的方法 3. Go语言中的整型与浮点型 4. Go语言中byte、rune与字符串区别? 1.7 1. 数组 数组是一个由固定长度的特定类型元素组成的序列,一个数组可以由零个或多个元素组成。因为数组的长度是固定的,所以在Go语言中很少直接使用数...阅读全文

掘金 2020年04月01日 王一白

每天一点GO语言——Linux环境下安装Go语言环境以及编写Go语言程序初体验

每天一点GO语言——Linux环境下安装Go语言环境以及编写Go语言程序初体验 一、安装Go语言环境 [root@localhost opt]# yum -y install wget git [root@localhost opt]# wget -c https://studygolang.com/dl/golang/go1.10.3.linux-amd64.tar.gz [root@localhost opt]# tar -zxvf go1.10.3.linux-amd64.tar.gz [...阅读全文

51CTO博客 2020-03-31 21:16:46 wx5d8a17c45cb5b

Go 为什么这么“快”

本文主要介绍了 Go 程序为了实现极高的并发性能,其内部调度器的实现架构(G-P-M 模型),以及为了最大限度利用计算资源,Go 调度器是如何处理线程阻塞的场景。怎么让我们的系统更快随着信息技术的迅速发展,单台服务器处理能力越来越强,迫使编程模式由从前的串行模式升级到并发模型。并发模型包含 IO 多路复用、多进程以及多线程,这几种模型都各有优劣,现代复杂的高并发架构大多是几种模型协同使用,不同场景应用不同模型,扬长避短,发挥服务器的最大性能。而多线程,因为其轻量和易用,成为并发编程中使用频率最高...阅读全文

51CTO博客 2020-03-31 21:05:26 jin1579

Go语言入门(八)线程安全&锁

线程安全&锁 定时器&一次性定时器 定时器 func main() { ticker := time.NewTicker(time.Second) //ticker.C是一个只读的chan,所以直接可以使用for range读取 for v := range ticker.C { fmt.Printf("hello %v\n",v) //按秒输出 } } 一次性定时器 func main() { select { case <- time.After(time.Second): fmt.Prin...阅读全文

51CTO博客 2020-03-31 20:10:16 wx5b285b48ed74e

leetcode_617

Golang: 思路:二叉树,用递归吧 代码如下: func mergeTrees(t1 *TreeNode, t2 *TreeNode) *TreeNode { if t1==nil&&t2!=nil{ return t2 }else if t1!=nil&&t2==nil{ return t1 }else if t1==nil&&t2==nil{ return nil }else{ return &TreeNode{ Val:t1.Val+t2.Val, Left:mergeTrees(t1...阅读全文

简书 2020-04-01 11:33:20 淳属虚构

golang准备

Go 环境变量export GOROOT=$HOME/goexport PATH=$PATH:$GOROOT/binexport GOPATH=$GOROOT/src:$HOME/Applications/Go安装目录清单/bin:包含可执行文件,如:编译器,Go 工具/doc:包含示例程序,代码工具,本地文档等/lib:包含文档模版/misc:包含与支持 Go 编辑器有关的配置文件以及 cgo 的示例/os_arch:包含标准库的包的对象文件(.a)/src:包含源代码构建脚本和标准库的包的完...阅读全文

简书 2020-04-01 11:33:02 剧终的开始

从零学习 Go 语言(07):流程控制之if-else

Hi,大家好呀,我是一个刚学习 Go 语言不久的新手,在入门 Golang 的这段时间里,我写了很多详细的学习笔记,很适合新手学习噢。这些文章已经发布在我的个人微信公众号里:《Go编程时光》里,今天开始将文章内容搬运到这里,希望有更多的人看到,给更的人带来帮助,但是这里文章会相对滞后,想获取最新文章,可以前往关注《Go编程时光》,请放心关注,这是一个纯分享的号,完全没有广告。 **系列导读 ** [从零学习 Go 语言(01):一文搞定开发环境的搭建](https://studygo...阅读全文

Go语言中文网 2020-04-01 11:07:38 hello_wbm

leetcode_621

Golang: 思路:任务调度,这里用了个很麻烦的实现,所以效率上来说不太高,思路可以这么想,如何将一个有长板和短板的木桶以最快的速度归0。 代码如下: func mergeTrees(t1 *TreeNode, t2 *TreeNode) *TreeNode { if t1==nil&&t2!=nil{ return t2 }else if t1!=nil&&t2==nil{ return t1 }else if t1==nil&&t2==nil{ return nil }else{ retu...阅读全文

简书 2020-04-01 09:33:05 淳属虚构

leetcode_637

Golang: 思路:二叉树,层序遍历即可 代码如下: func averageOfLevels(root *TreeNode) []float64 { var res []float64 if root!=nil{ stack:=[]*TreeNode{root} for len(stack)!=0{ level:=len(stack) num:=0 for i:=0;i<level;i++{ num+=stack[i].Val if stack[i].Left!=nil{ stack=app...阅读全文

简书 2020-04-01 09:33:04 淳属虚构

Golang的func参数及返回值

参数及返回值 参数一指定数据类型为int 参数二 (...interface{}) 可传任何多个类型的参数 返回值:单个返回值直接指定数据类型可以不使用 (),多个返回值需使用()。各返回值之间使用逗号分隔 func main() { demo.Params(10, 20, "golang", true) } func Params(id int, params ...interface{}) (error, error) { fmt.Println(id) fmt.Println(params...阅读全文

简书 2020-04-01 09:33:03 是个懒人

Choerodon 的微服务之路(三):服务注册与发现

▌文章的主要内容包括: 服务注册/发现 服务注册表 健康检查 在上一篇文章的开始,我们提到解决微服务架构中的通信问题,基本只要解决下面三个问题: 服务网络通信能力 服务间的数据交互格式 服务间如何相互发现与调用 网络的互通保证了服务之间是可以通信的,通过对JSON 的序列化和反序列化来实现网络请求中的数据交互。Choerodon 的 API 网关则统一了所有来自客户端的请求,并将请求路由到具体的后端服务上。然而这里就会有一个疑问,API 网关是如何与后端服务保持通信的,后端服务之间又是如何来进行...阅读全文

简书 2020-04-01 09:33:01 Choerodon猪齿鱼

我的golang代码规范

俗话说的好,细节决定成败。Coding过程中的规范就是这种可以决定成败的细节,好的规范可以是代码的可读性和可维护性都得到极大的增强,下面是我个人在工作中对自己的要求和规范,主要遵循一致性的原则。 1、包(package) 1.1 包的命名 全部小写。没有大写或下划线。 简短而简洁。请记住,在每个使用的地方都完整标识了该名称。 不用复数。例如net/url,而不是net/urls。 使用语义比较强的命名,而不要使用信息量不足,看不懂的命名。 1.2 包的 import 格式 对包的导入进行分组,标...阅读全文

简书 2020-04-01 05:32:41 CodePanda_Li

Kratos 初始化源码分析

Kratos 是bilibili开源的一套Go微服务框架,包含大量微服务相关框架及工具。 名字来源于:《战神》游戏以希腊神话为背景,讲述由凡人成为战神的奎托斯(Kratos)成为战神并展开弑神屠杀的冒险历程。 好!开始吧! 小提示:阅读源码时请保持清醒。 首先是按照Kratos tool 生产的工程目录。 ├── CHANGELOG.md ├── OWNERS ├── README.md ├── api # api目录为对外保留的proto文件及生成的pb.go文件 │ ├── api.bm.g...阅读全文

Segmentfault 2020-04-03 14:32:34 sdttttt