Python微信订餐小程序课程视频
https://edu.csdn.net/course/detail/36074
Python实战量化交易理财系统
https://edu.csdn.net/course/detail/35475
**摘要:**Goreplay 前称是 Gor,一个简单的 TCP/HTTP 流量录制及重放的工具,主要用 Go 语言编写。
本文分享自华为云社区《流量回放工具之 goreplay 核心源码分析》,作者:zuozewei。
一、前言
Goreplay 前称是 Gor,一个简单的 TCP/HTTP 流量录制及重放的工具,主要用 Go 语言编写。
Github地址:https://github.com/buger/goreplay
二、工程结构
这里以最新的 v1.3 版本为例,与 v1.0 的代码存在较大差异。
~/GoProjects/gor\_org/goreplay release-1.3 ±✚ tree -L 1
.
├── COMM-LICENSE
├── Dockerfile
├── Dockerfile.dev
├── ELASTICSEARCH.md
├── LICENSE.txt
├── Makefile
├── Procfile
├── README.md
├── byteutils
├── capture
├── circle.yml
├── docs
├── elasticsearch.go
├── emitter.go
├── emitter\_test.go
├── examples
├── go.mod
├── go.sum
├── gor.go
├── gor\_stat.go
├── homebrew
├── http\_modifier.go
├── http\_modifier\_settings.go
├── http\_modifier\_settings\_test.go
├── http\_modifier\_test.go
├── http\_prettifier.go
├── http\_prettifier\_test.go
├── input\_dummy.go
├── input\_file.go
├── input\_file\_test.go
├── input\_http.go
├── input\_http\_test.go
├── input\_kafka.go
├── input\_kafka\_test.go
├── input\_raw.go
├── input\_raw\_test.go
├── input\_tcp.go
├── input\_tcp\_test.go
├── kafka.go
├── limiter.go
├── limiter\_test.go
├── middleware
├── middleware.go
├── middleware\_test.go
├── mkdocs.yml
├── output\_binary.go
├── output\_dummy.go
├── output\_file.go
├── output\_file\_test.go
├── output\_http.go
├── output\_http\_test.go
├── output\_kafka.go
├── output\_kafka\_test.go
├── output\_null.go
├── output\_s3.go
├── output\_tcp.go
├── output\_tcp\_test.go
├── plugins.go
├── plugins\_test.go
├── pro.go
├── proto
├── protocol.go
├── ring
├── s3
├── s3\_reader.go
├── s3\_test.go
├── settings.go
├── settings\_test.go
├── sidenav.css
├── simpletime
├── site
├── size
├── snapcraft.yaml
├── tcp
├── tcp\_client.go
├── test\_input.go
├── test\_output.go
├── vendor
└── version.go
工程目录比较扁平,主要看 plugin.go,settings.go,emitter.go 几个主要文件,其它分 input_xxx ,output_xxx 都是适配具体协议的输入输出插件,程序入口是 gor.go 的 main 函数。
主要文件说明:
- settings.go:实现对于启动命令参数的解析,决定其注册那些插件到 Plugin.Inputs,Plugin.Outputs两个列表里。
- plugin.go:主要是所有输入输出插件的管理。
- emitter.go:程序核心事件处理,实现对于 Plugin.Inputs 输入流的读取、判断是否需要进行 middlewear 的处理、http修改等,然后异步复制流量到所有 Plugin.outputs,同时将所有 Plugin.outputs 中有 response 的数据,复制到所有 outputs 中。
- input_xxx.go:主要是输入的插件,实现 tcp/ht