EasyProxy,简单易用的tcp代理

EasyProxy,简单易用的tcp代理,第1张

最近工作中遇到了 golang 的项目,稍稍对其产生了点兴趣,打算认真学习下,正巧在搭建 mysql 主备环境的时候发现如果用一个代理程序的话自己测试会方便很多(主要还是为了造轮子),于是这个基于golang的 tcp proxy 项目就产生了

结构图如下:

最常见的负载均衡模式,但有几个点需要支持:

github: EasyProxy

欢迎交流~

在这个工程第一版结束后,较为深入的学习了 slice , map , channel , struct , interface 等结构,还玩了下golang的 协程 , 反射 , 多态 等特性,顺带掌握了下其工程化应当注意的 包循环引入 , debug , 打包发布 等问题

总之现在对golang的熟悉程度就不像看书那么虚了~

如还有其他问题,欢迎喜欢 golang 的小伙伴联系我: xsank#foxmmail.com

之前写过了Go语言gorm框架MySQL实践,其中对gorm框架在 *** 作MySQL的各种基础实践,下面分享一下如何使用gorm框架对MySQL直接进行性能测试的简单实践。

这里我使用了一个原始的Go语言版本的 FunTester 测试框架,现在只有一个基本的方法,实在是因为Go语言特性太强了。框架设计的主要思路之一就是利用Go语言的闭包和方法参数特性,将一个 func() 当做性能测试的主题,通过不断运行这个 func() 来实现性能测试。当然还有另外一个思路就是运行一个多线程任务类,类似 Java 版本的 com.funtester.base.constaint.ThreadBase 抽象类,这样可以设置一些类的属性,绑定一些测试资源,适配更多的测试场景。

下面演示select的性能测试,这里我用了随机ID查询的场景。

这里我使用从35开始递增的ID进行删除。

这里使用了select的用例部分,随机ID,然后更新name字段,随机10个长度的字符串。

这里用到了 FunTester 字段都是随机生成。

到这里可以看出,性能测试框架用到的都是gorm框架的基础API使用,这里MySQL连接池的管理工作完全交给了gorm框架完成,看资料说非常牛逼,我们只需要设置几个参数。这个使用体现很像 HttpClient 设置 HTTP 连接池类似,这里我们也可以看出这些优秀的框架使用起来都是非常简单的。

PS:关于gorm的基础使用的请参考上一期的文章Go语言gorm框架MySQL实践。

下载安装

到https://code.google.com/p/go/downloads/list,下载1.2版本go安装包,你可以选择MSI文件安装也可以下载ZIP压缩包,双击你所下载的MSI文件,然后根据安装引导一路下一步,一般默认安装在c:\Go目录

2

自动设置环境变量

安装引导会把C:\Go\bin设置到你的系统换环境PATH上,你需要关闭所有打开的CMD命令窗口,再次打开,输入go,出现帮助信息,出现如图信息说明你安装成功

3

ZIP包安装

下载ZIP文件并解压到所选目录(建议目录 C:\Go),如果你不解压到C:\Go目录,你必须设置GOROOT环境变量,添加C:\Go\bin 到PATH环境变量,如果别的目录则添为%GOROOT%\bin

4

测试安装

在任何目录编写一个go文件,命名为hello.go。

package main

import "fmt"

func main(){

fmt.Printf("Hello 百度回享")

}

打开CMD命令窗口,cd到hello.go目录,运行go run hello.go

5

下载mysql驱动包

使用github.com/go-sql-driver/mysql这个驱动包,打开cmd窗口输入:go get github.com/go-sql-driver/mysql,会下载到你的GOPATH路径的src 下

6

代码如下:

package main

import (

"database/sql"

"fmt"

_ "github.com/go-sql-driver/mysql"

)

func testSelect() {

db, err := sql.Open("mysql", "root:111111@tcp(127.0.0.1:3333)/showme?charset=utf8")

if err != nil {

fmt.Printf("connect err")

}

rows, err1 := db.Query("select userid,username from tb_user limit 0,5")

if err1 != nil {

fmt.Println(err1.Error())

return

}

defer rows.Close()

fmt.Println("")

cols, _ := rows.Columns()

for i := range cols {

fmt.Print(cols[i])

fmt.Print("\t")

}

fmt.Println("")

var userid int

var username string

for rows.Next() {

if err := rows.Scan(&userid, &username)err == nil {

fmt.Print(userid)

fmt.Print("\t")

fmt.Print(username)

fmt.Print("\t\r\n")

}

}

}

func main() {

testSelect()

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/7311764.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-04
下一篇 2023-04-04

发表评论

登录后才能评论

评论列表(0条)

保存