<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Redeo構(gòu)建 TCP 服務(wù)的高性能框架

          聯(lián)合創(chuàng)作 · 2023-09-30 04:32

          Redeo 是用于構(gòu)建與 redis 協(xié)議兼容的 TCP 服務(wù)器/服務(wù)的高性能框架。

          這個(gè)倉庫被組織成多個(gè)組成部分:

          • root 包包含構(gòu)建 redis 協(xié)議兼容的高性能服務(wù)器的框架
          • resp 實(shí)現(xiàn)了用于處理 RESP(REdis 序列化協(xié)議)、客戶端和服務(wù)器端的低級(jí)基元。它包含讀者和作者讀/寫請(qǐng)求和響應(yīng)的基本包裝器
          • 客戶端包含一個(gè)極簡(jiǎn)的池化客戶端

          有關(guān)完整文檔和示例,請(qǐng)參閱各個(gè)包和官方 API 文檔:https : //godoc.org/github.com/bsm/redeo。

          例子

          帶有兩個(gè)命令的簡(jiǎn)單服務(wù)器示例:

          package main
          
          import (
            "net"
          
            "github.com/bsm/redeo"
          )
          
          func main() {
          	srv := redeo.NewServer(nil)
          
          	// Define handlers
          	srv.HandleFunc("ping", func(w resp.ResponseWriter, _ *resp.Command) {
          		w.AppendInlineString("PONG")
          	})
          	srv.HandleFunc("info", func(w resp.ResponseWriter, _ *resp.Command) {
          		w.AppendBulkString(srv.Info().String())
          	})
          
          	// More handlers; demo usage of redeo.WrapperFunc
          	srv.Handle("echo", redeo.WrapperFunc(func(c *resp.Command) interface{} {
          		if c.ArgN() != 1 {
          			return redeo.ErrWrongNumberOfArgs(c.Name)
          		}
          		return c.Arg(0)
          	}))
          
          	// Open a new listener
          	lis, err := net.Listen("tcp", ":9736")
          	if err != nil {
          		panic(err)
          	}
          	defer lis.Close()
          
          	// Start serving (blocking)
          	srv.Serve(lis)
          }
          更復(fù)雜的處理程序:
          func main() {
          	mu := sync.RWMutex{}
          	data := make(map[string]string)
          	srv := redeo.NewServer(nil)
          
          	srv.HandleFunc("set", func(w resp.ResponseWriter, c *resp.Command) {
          		if c.ArgN() != 2 {
          			w.AppendError(redeo.WrongNumberOfArgs(c.Name))
          			return
          		}
          
          		key := c.Arg(0).String()
          		val := c.Arg(1).String()
          
          		mu.Lock()
          		data[key] = val
          		mu.Unlock()
          
          		w.AppendInt(1)
          	})
          
          	srv.HandleFunc("get", func(w resp.ResponseWriter, c *resp.Command) {
          		if c.ArgN() != 1 {
          			w.AppendError(redeo.WrongNumberOfArgs(c.Name))
          			return
          		}
          
          		key := c.Arg(0).String()
          		mu.RLock()
          		val, ok := data[key]
          		mu.RUnlock()
          
          		if ok {
          			w.AppendBulkString(val)
          			return
          		}
          		w.AppendNil()
          	})
          }
          Redeo 還支持命令包裝器:
          func main() {
          	mu := sync.RWMutex{}
          	data := make(map[string]string)
          	srv := redeo.NewServer(nil)
          
          	srv.Handle("set", redeo.WrapperFunc(func(c *resp.Command) interface{} {
          		if c.ArgN() != 2 {
          			return redeo.ErrWrongNumberOfArgs(c.Name)
          		}
          
          		key := c.Arg(0).String()
          		val := c.Arg(1).String()
          
          		mu.Lock()
          		data[key] = val
          		mu.Unlock()
          
          		return 1
          	}))
          
          	srv.Handle("get", redeo.WrapperFunc(func(c *resp.Command) interface{} {
          		if c.ArgN() != 1 {
          			return redeo.ErrWrongNumberOfArgs(c.Name)
          		}
          
          		key := c.Arg(0).String()
          		mu.RLock()
          		val, ok := data[key]
          		mu.RUnlock()
          
          		if ok {
          			return val
          		}
          		return nil
          	}))
          }
          瀏覽 12
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          編輯 分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          編輯 分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国产婬乱片A片AAA毛片下载 | 久热中文字幕在线 | 亚洲一级Av无码毛片久久精品 | 中文无码无字幕A久久东京热免费视频 | 草逼逼逼逼 |