资讯专栏INFORMATION COLUMN

房间号生成器

LMou / 645人阅读

摘要:在写游戏服务器中特别是卡牌一类的游戏经常需要让用户手动输入房间号加入一个房间为了用户友好这个房间号通常需要限定长度比如位或者位数字因此用数据库的对用户不太友好其一是长度不固定其二是后期房间号会很长所以专门写了一个房间号生成器服务器其满足以下

在写游戏服务器中, 特别是卡牌一类的游戏, 经常需要让用户手动输入房间号加入一个房间, 为了用户友好, 这个房间号通常需要限定长度, 比如4位或者6位数字. 因此用数据库的auto_increment对用户不太友好, 其一是长度不固定, 其二是后期房间号会很长, 所以专门写了一个房间号生成器服务器, 其满足以下需求:

指定生成的的房间号范围: 比如[100000, 1000000)

租借过期: 当一个房间号被生成后, 若超时未续期, 则自动释放(冻结)

房间号冻结: 当一个房间号被归还后, 在指定时间范围内不会被重新分配

安装

项目地址: 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)

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/69521.html

相关文章

  • 房间成器

    摘要:在写游戏服务器中特别是卡牌一类的游戏经常需要让用户手动输入房间号加入一个房间为了用户友好这个房间号通常需要限定长度比如位或者位数字因此用数据库的对用户不太友好其一是长度不固定其二是后期房间号会很长所以专门写了一个房间号生成器服务器其满足以下 在写游戏服务器中, 特别是卡牌一类的游戏, 经常需要让用户手动输入房间号加入一个房间, 为了用户友好, 这个房间号通常需要限定长度, 比如4位或者...

    LdhAndroid 评论0 收藏0
  • Vue2 + Nodejs + WebSocket 完成你画我猜多人在线游戏

    摘要:使用即可完成一个很有意思的在线游戏作品。你画我猜,相信大家对这个游戏都很熟悉。我用实现了你画我猜这个游戏。可以修改画笔颜色,粗细,进行撤销,恢复,清空等操作。第一个猜完后,游戏时间缩短为秒。 使用 websocket + vue2 即可完成一个很有意思的在线游戏作品。你画我猜,相信大家对这个游戏都很熟悉。 我用Vue2 + mint-ui + nodejs + websocket ...

    XanaHopper 评论0 收藏0
  • 前言 项目开始是因为工作需要一个聊天室功能,但是因为某些原因最终选用的是基于xmpp协议的Strophe.js写的。于是就想用node自己写一套,本来只是想简单的写个聊天页面,但是写完了又不满意,所以不断的重构(似乎可以理解产品经理为什么老是改需求了๑乛◡乛๑)。很多东西,比如mongodb,我也是第一次用,以前只接触过mysql。所以都是一边学一边写,利用工作之余的时间,断断续续的写了几个月(...

    PAMPANG 评论0 收藏0
  • 前言 项目开始是因为工作需要一个聊天室功能,但是因为某些原因最终选用的是基于xmpp协议的Strophe.js写的。于是就想用node自己写一套,本来只是想简单的写个聊天页面,但是写完了又不满意,所以不断的重构(似乎可以理解产品经理为什么老是改需求了๑乛◡乛๑)。很多东西,比如mongodb,我也是第一次用,以前只接触过mysql。所以都是一边学一边写,利用工作之余的时间,断断续续的写了几个月(...

    fireflow 评论0 收藏0
  • B 站直播间数据爬虫

    摘要:站的弹幕服务器也有类似的机制,随便打开一个未开播的直播间,抓包将看到每隔左右会给服务端发送一个心跳包,协议头第四部分的值从修改为即可。 原文:B 站直播间数据爬虫, 欢迎转载项目地址:bilibili-live-crawler 前言 起因 去年在 B 站发现一个后期超强的 UP 主:修仙不倒大小眼,专出 PDD 这样知名主播的吃鸡精彩集锦,涨粉超快。于是想怎么做这样的 UP,遇到的第一...

    xuweijian 评论0 收藏0

发表评论

0条评论

LMou

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<