房間號產生器

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

在寫遊戲伺服器中, 特別是卡牌一類的遊戲, 經常需要讓使用者手動輸入房間號加入一個房間, 為了方便使用, 這個房間號通常需要限定長度, 比如4位或者6位元字. 因此用資料庫的auto_increment對使用者不太友好, 其一是長度不固定, 其二是後期房間號會很長, 所以專門寫了一個房間號產生器伺服器, 其滿足以下需求:

  1. 指定產生的的房間號範圍: 比如[100000, 1000000)
  2. 租借到期: 當一個房間號被產生後, 若逾時未續期, 則自動釋放(凍結)
  3. 房間號凍結: 當一個房間號被歸還後, 在指定時間範圍內不會被重新分配

安裝

項目地址: https://github.com/acrazing/uno

安裝:

go get -u github.com/acrazing/uno

使用

介面很簡單:

import "github.com/acrazing/uno"import "context"// 建立一個workerw := uno.NewWorker()// 配置w.Init(&uno.Options{    MinValue: 1e5,    MaxValue: 1e6,})
// 啟動服務go w.Run(context.Background())
// 產生IDno := w.Rent()if no == 0 {    // 如果返回0, 則表示產生房間號失敗    panic("")}
// 釋放IDw.Return(no)
// 續租IDok := w.Relet(no)if ok {    // 如果返回false, 表示續租失敗}

gRPC

gRPC的服務和訊息都已經定義好, 可以直接取用:

    addr := "127.0.0.1:1234"    // server    listener, err := net.Listen("tcp", addr)    if err != nil {        panic(err)    }    server := grpc.NewServer()    uno.RegisterUnoServer(server, uno.Service)    uno.Service.Init(&uno.Options{        MinValue: 2,        MaxValue: 5,        TTF:      time.Second,        TTL:      time.Second,    })    go uno.Service.Run(context.Background())    go server.Serve(listener)    // client    conn, _ := grpc.Dial(addr, grpc.WithInsecure())    client := uno.NewUnoClient(conn)    no, err := client.Rent(context.Background(), &uno.Empty{})    log.Printf("rent: %v, err: %v", no, err)
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.