分享
  1. 首页
  2. 文章

房间号生成器

acrazing · · 4575 次点击 · · 开始浏览
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

在写游戏服务器中, 特别是卡牌一类的游戏, 经常需要让用户手动输入房间号加入一个房间, 为了用户友好, 这个房间号通常需要限定长度, 比如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"
// 创建一个worker
w := uno.NewWorker()
// 配置
w.Init(&uno.Options{
 MinValue: 1e5,
 MaxValue: 1e6,
})
// 启动服务
go w.Run(context.Background())
// 生成ID
no := w.Rent()
if no == 0 {
 // 如果返回0, 则表示生成房间号失败
 panic("")
}
// 释放ID
w.Return(no)
// 续租ID
ok := 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)

有疑问加站长微信联系(非本文作者)

本文来自:Segmentfault

感谢作者:acrazing

查看原文:房间号生成器

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

关注微信
4575 次点击
暂无回复
添加一条新回复 (您需要 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传

用户登录

没有账号?注册
(追記) (追記ここまで)

今日阅读排行

    加载中
(追記) (追記ここまで)

一周阅读排行

    加载中

关注我

  • 扫码关注领全套学习资料 关注微信公众号
  • 加入 QQ 群:
    • 192706294(已满)
    • 731990104(已满)
    • 798786647(已满)
    • 729884609(已满)
    • 977810755(已满)
    • 815126783(已满)
    • 812540095(已满)
    • 1006366459(已满)
    • 692541889

  • 关注微信公众号
  • 加入微信群:liuxiaoyan-s,备注入群
  • 也欢迎加入知识星球 Go粉丝们(免费)

给该专栏投稿 写篇新文章

每篇文章有总共有 5 次投稿机会

收入到我管理的专栏 新建专栏