亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Golang > 正文

go語言實現的memcache協議服務的方法

2020-04-01 19:15:51
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了go語言實現的memcache協議服務的方法,實例分析了Go語言使用memcache的技巧,具有一定參考借鑒價值,需要的朋友可以參考下
 

本文實例講述了go語言實現的memcache協議服務的方法。分享給大家供大家參考。具體如下:

1. Go語言代碼如下:

復制代碼代碼如下:
package memcachep
import (
    "bufio"
    "fmt"
    "io"
    "strconv"
    "strings"
)
//mc請求產生一個request對象
type MCRequest struct {
    //請求命令
    Opcode CommandCode
    //key
    Key string
    //請求內容
    Value []byte
    //請求標識
    Flags int
    //請求內容長度
    Length int
    //過期時間
    Expires int64
}
//request to string
func (req *MCRequest) String() string {
    return fmt.Sprintf("{MCRequest opcode=%s, bodylen=%d, key='%s'}",
        req.Opcode, len(req.Value), req.Key)
}
//將socket請求內容 解析為一個MCRequest對象
func (req *MCRequest) Receive(r *bufio.Reader) error {
    line, _, err := r.ReadLine()
    if err != nil || len(line) == 0 {
        return io.EOF
    }
    params := strings.Fields(string(line))
    command := CommandCode(params[0])
    switch command {
    case SET, ADD, REPLACE:
        req.Opcode = command
        req.Key = params[1]
        req.Length, _ = strconv.Atoi(params[4])
        value := make([]byte, req.Length+2)
        io.ReadFull(r, value)
        req.Value = make([]byte, req.Length)
        copy(req.Value, value)
    case GET:
        req.Opcode = command
        req.Key = params[1]
        RunStats["cmd_get"].(*CounterStat).Increment(1)
    case STATS:
        req.Opcode = command
        req.Key = ""
    case DELETE:
        req.Opcode = command
        req.Key = params[1]
    }
    return err
}

2. Go語言代碼:
復制代碼代碼如下:
package memcachep
import (
    "fmt"
    "io"
)
type MCResponse struct {
    //命令
    Opcoed CommandCode
    //返回狀態
    Status Status
    //key
    Key string
    //返回內容
    Value []byte
    //返回標識
    Flags int
    //錯誤
    Fatal bool
}
//解析response 并把返回結果寫入socket鏈接
func (res *MCResponse) Transmit(w io.Writer) (err error) {
    switch res.Opcoed {
    case STATS:
        _, err = w.Write(res.Value)
    case GET:
        if res.Status == SUCCESS {
            rs := fmt.Sprintf("VALUE %s %d %d/r/n%s/r/nEND/r/n", res.Key, res.Flags, len(res.Value), res.Value)
            _, err = w.Write([]byte(rs))
        } else {
            _, err = w.Write([]byte(res.Status.ToString()))
        }
    case SET, REPLACE:
        _, err = w.Write([]byte(res.Status.ToString()))
    case DELETE:
        _, err = w.Write([]byte("DELETED/r/n"))
    }
    return
}

3. Go語言代碼如下:
復制代碼代碼如下:
package memcachep
import (
    "fmt"
)
type action func(req *MCRequest, res *MCResponse)
var actions = map[CommandCode]action{
    STATS: StatsAction,
}
//等待分發處理
func waitDispatch(rc chan chanReq) {
    for {
        input := <-rc
        input.response <- dispatch(input.request)
    }
}
//分發請求到響應的action操作函數上去
func dispatch(req *MCRequest) (res *MCResponse) {
    if h, ok := actions[req.Opcode]; ok {
        res = &MCResponse{}
        h(req, res)
    } else {
        return notFound(req)
    }
    return
}
//未支持命令
func notFound(req *MCRequest) *MCResponse {
    var response MCResponse
    response.Status = UNKNOWN_COMMAND
    return &response
}
//給request綁定上處理程序
func BindAction(opcode CommandCode, h action) {
    actions[opcode] = h
}
//stats
func StatsAction(req *MCRequest, res *MCResponse) {
    res.Fatal = false
    stats := ""
    for key, value := range RunStats {
        stats += fmt.Sprintf("STAT %s %s/r/n", key, value)
    }
    stats += "END/r/n"
    res.Value = []byte(stats)
}

 

希望本文所述對大家的Go語言程序設計有所幫助。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美—级a级欧美特级ar全黄| 高清日韩电视剧大全免费播放在线观看| 欧美极品少妇xxxxⅹ免费视频| 欧美日韩一区二区三区在线免费观看| 国产69久久精品成人看| 精品爽片免费看久久| 亚洲加勒比久久88色综合| 中文字幕亚洲在线| 欧美一级视频免费在线观看| 国产一区二区欧美日韩| 国产美女久久久| 亚洲精品国精品久久99热| 国产精品入口夜色视频大尺度| 欧美亚洲另类视频| 日韩专区中文字幕| 欧美又大粗又爽又黄大片视频| 久热精品视频在线| www.久久久久久.com| 欧美激情一区二区三区在线视频观看| 欧美日韩福利视频| 欧美老女人xx| 亚洲精品ady| 日韩成人激情在线| 欧美小视频在线观看| 日韩视频欧美视频| 成人精品网站在线观看| 日韩精品中文字幕有码专区| 久久久久久久久久久国产| 久久91亚洲人成电影网站| 国产精品91久久| 日本精品一区二区三区在线播放视频| 欧美视频中文字幕在线| 国产一区二区在线免费| 国产日韩欧美日韩| zzjj国产精品一区二区| 国产女精品视频网站免费| 欧美性xxxxxxxxx| 国产精品一区二区av影院萌芽| 亚洲欧美在线一区| 欧美一级大胆视频| 亚洲视频精品在线| 国产第一区电影| 91丝袜美腿美女视频网站| 国产一区二区三区视频免费| 久热爱精品视频线路一| 色综久久综合桃花网| 久久久久久久久久国产| 国产亚洲精品日韩| 尤物精品国产第一福利三区| 久久99久久亚洲国产| 亚洲伊人一本大道中文字幕| 国产色婷婷国产综合在线理论片a| 久久久久久噜噜噜久久久精品| xxxxxxxxx欧美| 91热福利电影| 亚洲风情亚aⅴ在线发布| 午夜精品久久久久久久99热| 亚洲精品久久久久久久久久久久| 久久久成人的性感天堂| 国产亚洲a∨片在线观看| 69av成年福利视频| 91色在线观看| 韩国精品久久久999| 精品国内产的精品视频在线观看| 国产精品专区h在线观看| 久久精品成人欧美大片古装| 一区二区三区视频免费在线观看| 国产精品一区专区欧美日韩| 热re91久久精品国99热蜜臀| 欧美国产亚洲视频| 92福利视频午夜1000合集在线观看| 国产亚洲成精品久久| 日韩视频免费中文字幕| 亚洲精品视频在线播放| 奇门遁甲1982国语版免费观看高清| 国产亚洲美女久久| 高清一区二区三区四区五区| 欧美激情免费观看| 亚洲无限乱码一二三四麻| 国产在线拍偷自揄拍精品| 国产精品大陆在线观看| 亚洲成人xxx| 国产精品日日摸夜夜添夜夜av| 久久精品男人天堂| 午夜免费日韩视频| 久久影视电视剧凤归四时歌| 国产欧美va欧美va香蕉在| 久久人人爽亚洲精品天堂| 久久久成人精品视频| 色婷婷久久一区二区| 中文字幕av一区二区| 日韩成人在线播放| 91精品在线看| 欧美日韩在线观看视频| 久久久久亚洲精品成人网小说| 欧美精品在线视频观看| 青青草99啪国产免费| 国内精品小视频| 亚洲丁香婷深爱综合| 亚洲日韩欧美视频| 欧美黑人巨大精品一区二区| 久久久久久亚洲精品| 国产精品激情av电影在线观看| 亚洲高清av在线| 色哟哟亚洲精品一区二区| 国产精品99免视看9| 成人网欧美在线视频| 日韩中文字幕在线播放| 欧美国产日韩二区| 国产成人精品一区| 亚洲国产精品人久久电影| 69视频在线播放| 中文字幕亚洲无线码a| 日韩最新在线视频| 美女性感视频久久久| 国产亚洲激情在线| 欧美人与性动交a欧美精品| 日韩av在线精品| 日本一区二三区好的精华液| 国产91av在线| 一道本无吗dⅴd在线播放一区| 日韩成人xxxx| 国产在线观看精品| 一本色道久久88亚洲综合88| 国内精品久久久| 国产精品一区二区久久国产| 欧美视频第一页| 成人免费激情视频| 亚洲最大福利视频网站| 亚洲a级在线播放观看| 孩xxxx性bbbb欧美| 欧美一区二区三区免费观看| 日韩欧美亚洲一二三区| 日韩精品免费观看| 欧美日韩免费观看中文| 欧美成人h版在线观看| 欧美精品videosex性欧美| 九色精品美女在线| 亚洲二区中文字幕| 尤物九九久久国产精品的特点| 国产福利视频一区| 色偷偷亚洲男人天堂| 欧美另类在线播放| 国模精品视频一区二区三区| 亚洲欧美激情四射在线日| 欧洲亚洲女同hd| 91国自产精品中文字幕亚洲| 亚洲色在线视频| 91久久在线视频| 日韩在线免费高清视频| 国产日韩欧美在线看| 伊人成人开心激情综合网| 亚洲黄色av女优在线观看| 91亚洲国产精品| 国产成人精品亚洲精品| 欧美香蕉大胸在线视频观看| 国产欧美日韩中文| 成人黄在线观看| 亚洲系列中文字幕| 久久亚洲私人国产精品va| 亚洲欧美制服综合另类| 米奇精品一区二区三区在线观看| 国产欧美精品一区二区| 中文字幕v亚洲ⅴv天堂|