好湿?好紧?好多水好爽自慰,久久久噜久噜久久综合,成人做爰A片免费看黄冈,机机对机机30分钟无遮挡

主頁 > 知識庫 > go語言實現(xiàn)的memcache協(xié)議服務的方法

go語言實現(xiàn)的memcache協(xié)議服務的方法

熱門標簽:外呼系統(tǒng)多少錢一年 經常接到推銷電話機器人的電話 旅游廁所如何電子地圖標注 外呼系統(tǒng)如何接收服務密碼 客服級電銷機器人 海外照相館地圖標注入駐 智能營銷軟件 工商信用卡外呼系統(tǒng)教程 滁州自建外呼系統(tǒng)

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

完整實例代碼點擊此處本站下載。

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
    //返回狀態(tài)
    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,
}
//等待分發(fā)處理
func waitDispatch(rc chan chanReq) {
    for {
        input := -rc
        input.response - dispatch(input.request)
    }
}
//分發(fā)請求到響應的action操作函數(shù)上去
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語言程序設計有所幫助。

您可能感興趣的文章:
  • golang簡單tls協(xié)議用法完整示例
  • GO語言實現(xiàn)簡單TCP服務的方法
  • Go語言服務器開發(fā)之簡易TCP客戶端與服務端實現(xiàn)方法
  • Go語言基于Socket編寫服務器端與客戶端通信的實例
  • go語言實現(xiàn)一個簡單的http客戶端抓取遠程url的方法
  • Go語言服務器開發(fā)之客戶端向服務器發(fā)送數(shù)據(jù)并接收返回數(shù)據(jù)的方法
  • Golang實現(xiàn)的聊天程序服務端和客戶端代碼分享
  • golang實現(xiàn)簡單的udp協(xié)議服務端與客戶端示例

標簽:九江 喀什 湘潭 本溪 楚雄 運城 深圳 晉城

巨人網(wǎng)絡通訊聲明:本文標題《go語言實現(xiàn)的memcache協(xié)議服務的方法》,本文關鍵詞  語言,實現(xiàn),的,memcache,協(xié)議,;如發(fā)現(xiàn)本文內容存在版權問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內容系統(tǒng)采集于網(wǎng)絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《go語言實現(xiàn)的memcache協(xié)議服務的方法》相關的同類信息!
  • 本頁收集關于go語言實現(xiàn)的memcache協(xié)議服務的方法的相關信息資訊供網(wǎng)民參考!
  • 推薦文章
    主站蜘蛛池模板: 久久成人黄色| 人人妻人人澡人人爽久久av| 日韩精品一区二区在线观看| japan13hdxxxx日本| 蒙古女人一级毛片| 少妇婬荡呻吟揉捏丰满奶头网站| igao视频网在线观看| 平野紫耀| 日韩一区二区免费视频| GOGO欧洲无码人体视频| 国精产品999一区二区三区有| 午夜电影1000| 成熟放荡的肉色丝袜老师| 旧里番堕落~女教師破壊~无修| 欧州又粗又大又长八A片| 国产精品视频国产永久视频| 国产六区| 少萝疯狂?喷水自慰| 巜人妻初尝按摩师BD中字| yin乱导航| 厨房春潮唐小米| 日日操狠狠干| 美女胸黄污污污www网站久久| 秋霞在线手机观看| 免费看污污网站| 黑人巨大精品一区二区在线| 98久久国产免费A片观看| 在公交车上被艹| jizzjizzjizz国产| 台湾佬综合| 小秘书夹得真紧好爽h调视频| 女明星的一级毛片视频| 国产欧美精品一区aⅴ影院| 久9热精品视频在线观看| 大学生精油按摩| 好爽?要了?再深点久久口| 高肉ABO文H| 在线观看视频日本| 养父与养女的爱| 亚州人成无码论理A片在线观看| 少爷潮喷翻白眼漏尿高H小说|