Go重写Redis中间件 - GO实现TCP服务器

GO实现TCP服务器

首先新建一个项目go-redis,将config和lib包放到项目中,config.go用来解析配置,比如端口、功能、DB数;lib包有两个文件夹,分别是logger和sync,其中logger.go是一个日志框架,sync包中的bool.go包装了atomic操作,因为atomic原生没有bool类型,所以将uint32类型改造成bool型的atomic,wait.go包装了WaitGroup等待组,多做的工作是将等待组增加一个超时功能,redis.conf配置文件写明我们redis要写在的端口和监听地址

正式开始

  • 新建一个接口文件夹,放一些全局用到的接口,首先是TCP层的handler.go,这个接口的目的是让handler.go代表一个抽象的业务逻辑,让TCP服务器只处理TCP层的连接,具体的业务扔给handler去做
type Handler interface {
	Handle(ctx context.Context, conn net.Conn)
	Close() error
}

TCP服务器开发

server.go

net.listen服务器监听端口地址,如果监听成功就调用Accept阻塞等待客户端连接,但这里我们将listener传给ListenAndServe方法,该方法传入三个参数,分别是listener,处理客户端业务的handler和传递关闭信号的channel,在其中for循环阻塞等待客户端连接,新的客户端过来后一个协程一个连接,将上下文ctx和conn句柄传入handler.Handle方法,然后我们只

你可能感兴趣的:(Go,golang,redis,中间件)