当前位置: 首页 > news >正文

网站用户体验比较厦门双瑞高磁网站是谁做的

网站用户体验比较,厦门双瑞高磁网站是谁做的,什么设计师前景最好,有人找做网站的Go实现Redis协议解析器 Redis网络协议详解 在解决完通信后,下一步就是搞清楚 Redis 的协议-RESP协议,其实就是一套类似JSON、Protocol Buffers的序列化协议,也就是我们的客户端和服务端通信的协议 RESP定义了5种格式 简单字符串(Simple String) : 服务器用来返回简单的结…

Go实现Redis协议解析器

Redis网络协议详解

在解决完通信后,下一步就是搞清楚 Redis 的协议-RESP协议,其实就是一套类似JSON、Protocol Buffers的序列化协议,也就是我们的客户端和服务端通信的协议

RESP定义了5种格式

  • 简单字符串(Simple String) : 服务器用来返回简单的结果,以"+"开头,"\r\n"结尾的字符串形式,比如 "+OK\r\n" 
  • 错误信息(Error) : 服务器用来返回简单的错误信息,以"-"开头,"\r\n"结尾的字符串形式,比如 "-ERR message\r\n" 
  • 整数(Integer) : 服务器端和客户端用来互相通信的格式,以":"开头,"\r\n"结尾的字符串形式,比如":123456\r\n"
  • 字符串(Bulk String) : 以"$"开头,后跟实际发送字节数,以"\r\n"结尾,比如"$3\r\nSET\r\n",空字符串"$0\r\n\r\n","$9\r\nLBJ\r\nAD"
  • 数组(Array) : 以*开头,后跟成员个数,比如"*3\r\n$3\r\nSET\r\n$3\r\nkey\r\n$5\r\nvalue\r\n"

实现RESP协议

创建两个resp协议接口,首先是conn.go,这个接口是在Redis协议层代表客户端的连接,里面定义3个方法,分别是:Write()用来给客户端回复消息;GetDBIndex()用来查询客户端用的哪个DB;SelectDB()用来切换Redis间的库

type Connection interface {Write([]byte) errorGetDBIndex() intSelectDB(int)
}

然后是reply.go,这个接口是代表各种客户端对服务端数据的回复,他是用来把回复的内容转成字节,因为TCP协议来回写就是写字节

type Reply interface {ToBytes() []byte
}

接下来就是RESP协议的实现,在resp文件夹里实现各种服务端对客户端的回复

consts.go 固定正常回复

type PongReply struct{}
var pongBytes = []byte("+PONG\r\n")
func (r *PongReply) ToBytes() []byte {return pongBytes
}
func MakePangReply() *PongReply {return &PongReply{}
}type OkReply struct{}
var okBytes = []byte("+OK\r\n")
func (r *OkReply) ToBytes() []byte {return okBytes
}
//回复常量,节约内存
var theOkReply = new(OkReply)
func MakeOkReply() *OkReply {return theOkReply
}//空字符串 null
var nullBulkBytes = []byte("$-1\r\n")
type NullBulkReply struct{}
func (r *NullBulkReply) ToBytes() []byte {return nullBulkBytes
}
func MakeNullBulkReply() *NullBulkReply {return &NullBulkReply{}
}//空数组
var emptyMultiBulkBytes = []byte("*0\r\n")
type EmptyMultiBulkReply struct{}
func (r *EmptyMultiBulkReply) ToBytes() []byte {return emptyMultiBulkBytes
}
func MakeEmptyMultiBulkReply() *EmptyMultiBulkReply {return &EmptyMultiBulkReply{}
}type NoReply struct{}
var noBytes = []byte("")
func (r *NoReply) ToBytes() []byte {return noBytes
}

然后是创建一个reply.go接口承载错误回复,其中Error()是系统的错误方法

type ErrorReply interface {Error() stringToBytes() []byte
}

error.go 固定异常回复

type UnknownErrReply struct{}
var unknownErrBytes = []byte("-Err unknown\r\n")
func (r *UnknownErrReply) ToBytes() []byte {return unknownErrBytes
}
func (r *UnknownErrReply) Error() string {return "Err unknown"
}// ArgNumErrReply represents wrong number of arguments for command
type ArgNumErrReply struct {Cmd string
}
func (r *ArgNumErrReply) ToBytes() []byte {return []byte("-ERR wrong number of arguments for '" + r.Cmd + "' command\r\n")
}
func (r *ArgNumErrReply) Error() string {return "ERR wrong number of arguments for '" + r.Cmd + "' command"
}
func MakeArgNumErrReply(cmd string) *ArgNumErrReply {return &ArgNumErrReply{Cmd: cmd,}
}// SyntaxErrReply represents meeting unexpected arguments
type SyntaxErrReply struct{}
var syntaxErrBytes = []byte("-Err syntax error\r\n")
var theSyntaxErrReply = &SyntaxErrReply{}
func MakeSyntaxErrReply() *SyntaxErrReply {return theSyntaxErrReply
}
func (r *SyntaxErrReply) ToBytes() []byte {return syntaxErrBytes
}
func (r *SyntaxErrReply) Error() string {return "Err syntax error"
}// WrongTypeErrReply represents operation against a key holding the wrong kind of value
type WrongTypeErrReply struct{}
var wrongTypeErrBytes = []byte("-WRONGTYPE Operation against a key holding the wrong kind of value\r\n")
func (r *WrongTypeErrReply) ToBytes() []byte {return wrongTypeErrBytes
}
func (r *WrongTypeErrReply) Error() string {return "WRONGTYPE Operation against a key holding the wrong kind of value"
}// ProtocolErrReply represents meeting unexpected byte during parse requests
type ProtocolErrReply struct {Msg string
}
func (r *ProtocolErrReply) ToBytes() []byte {
http://www.yayakq.cn/news/431622/

相关文章:

  • 世界十大网站排名宁海县建设局网站下属单位
  • 信丰县建设局网站wordpress添加路由
  • 网站上做地图手机上显示女装网站建设规划书
  • 南通通州住房和城乡建设网站徐州网站建设 和信
  • 沈阳网 沈阳网站wordpress 强大
  • 做图表的网站知乎交友免费网站建设
  • 如何做网站资讯设计在线官网作品欣赏
  • 模板网站建设开发投资公司注册条件和要求
  • 精品课程网站开发环境wordpress外贸模板下载
  • 织梦响应式网站模板Wordpress变装
  • 常州网站建设技术托管ps教程网站有哪些
  • 北京路口优化北京网站设计制作关键词优化微信小程序开发推广
  • 想学网站开发wordpress 文章代码
  • 网站服务器崩溃怎么办wordpress自带api
  • 最适合新闻资讯建站的cms网站建设技术的发展
  • 关于12380网站建设文件智能网站建设报价
  • 静态页面网站在线图片编辑器手机版
  • 一个空间只能放一个网站吗怎么给钓鱼网站做防红
  • 保定电子网站建设专业的企业网站建设公司
  • 上海微网站制作建设wordpress主题无法安装
  • 网站建设-设计高德地图国际版
  • 河南第二建设集团网站视频wordpress the post
  • 做照片书网站好自媒体平台源码
  • 数据库网站开发教程网站建设与推广范文
  • 建设个人网站对于网站界面
  • 深圳官方网站设计人力外包公司怎么赚钱
  • 成都自适应建站哪家好如何自建网站卖产品
  • 新网站如何做免费推广东莞建筑公司
  • 如何提高网站吸引力厦门市网站建设软件开发公司
  • 网站建设如何提案建筑图纸网站