首页 > 其他分享 >用 Pulsar 开发多人小游戏(七):用 Pulsar Connector 制作全局计分板

用 Pulsar 开发多人小游戏(七):用 Pulsar Connector 制作全局计分板

时间:2023-02-08 14:15:39浏览次数:54  
标签:connector redis Redis Connector topic 小游戏 sink Pulsar

本文是《用 Pulsar 开发多人在线小游戏》的第三篇,配套源码和全部文档参见我的 GitHub 仓库 play-with-pulsar 以及我的文章列表。

上一章介绍了 Pulsar Function 的使用,每个游戏房间都有对应的 score topic,每个玩家的得分都会被发送到 score topic 中,游戏客户端通过读取这个 topic 的 tableView 来显示局内计分板。

但考虑到一个玩家可能去过多个游戏房间进行游戏,所以我们希望能够对玩家在不同房间中的总分做一个统计,实现类似「全服排行榜」的功能。

想要实现这个全局计分板,简单直接的做法就是创建 Consumer 消费所有 {roomName}-score-topic 中的消息,对每个玩家进行总分统计。不过这样搞比较麻烦,每次计算全局分数都要重新计算一次。

毕竟 Pulsar 不是一个主打数据聚合和统计的系统,所以我会考虑把用户的分数信息导出到其他数据系统中,做进一步的分析和统计。

因为我们发送到 score Topic 中的消息其实是键值对,键是 playerName-roomName 的形式,值是该玩家在该房间中获得的最新分数。

那么如果我们可以把 {roomName}-score-topic 中的消息存储到 Redis 中,就可以用 Redis 的 playerName-* 的形式拿到某个玩家在所有房间内的分数信息。然后对它们求和即可。

本文就以 Redis 举例,看看如何通过 Pulsar connector 功能将 Pulsar 中的数据自动导出到其他系统

Pulsar connector 简介

先上官网文档链接:

https://pulsar.apache.org/docs/next/io-overview/

connector 分两种,一种叫 source,另一种叫 sink。顾名思义,source 就是把数据从其他系统导入 Pulsar 中,sink 就是把 Pulsar 中的数据导入到其他系统中。

其实我理解 Pulsar connector 本质就是 Pulsar Function,这个 Function 持有了其他数据系统的客户端,作为 Pulsar 和其他系统之间的桥梁罢了。

之前介绍 Pulsar Function 时说过,Function 有两种部署形式,可以独立部署为一个服务集群,也可以上传部署到 broker 上,所以 source 和 sink 也可以独立部署或者上传部署到 broker 上。稍后会看到,我会用 localrun 在本地启动一个 Redis sink connector,也就是独立部署的形式。

我们想把 topic 中的数据导入 Redis,所以需要在 Pulsar build-in connector 的下载页面寻找 Redis sink connector,下载之后按照 Redis sink 的配置文档 操作即可。

首先在 Pulsar 的文件夹中创建一个 connectors 目录存储所有 Pulsar connector,并下载 Redis sink connector 到这个目录:

mkdir connectors
curl -O https://www.apache.org/dyn/mirrors/mirrors.cgi?action=download&filename=pulsar/pulsar-2.11.0/connectors/pulsar-io-redis-2.11.0.nar --output-dir ./connectors

部署 Redis Sink

我们先在本地用 docker 启动一个 Redis 服务器:

docker pull redis:5.0.5
docker run -d -p 6379:6379 --name my-redis redis:5.0.5 --requirepass "mypassword"

我们想把 Pulsar 里面的数据导入到 Redis 里面,所以得给出这个 Redis 服务的必要信息对吧,所以建立一个 redis-sink-config.yml 文件:

# Redis config
configs:
    redisHosts: "localhost:6379"
    redisPassword: "mypassword"
    redisDatabase: 0
    clientMode: "Standalone"
    operationTimeout: 2000
    batchSize: 1
    batchTimeMs: 1000
    connectTimeout: 3000

然后,我们用 localrun 模式在本地启动一个 Pulsar Connect 服务,让它运行 Redis 的 connector,并且要告诉它要从哪个 topic 读数据存储到 Redis 中:

bin/pulsar-admin sinks localrun \
    --archive connectors/pulsar-io-redis-2.11.0.nar \
    --tenant public \
    --namespace default \
    --name my-redis-sink \
    --sink-config-file redis-sink-config.yaml \
    --topics-pattern '*-score-topic'

这个命令在本地启动了 Redis sink connector,并且指定读取所有后缀为 -score-topic 的 topic 数据,存储到 Redis 中。

接下来,就可以通过以下 Redis 命令查询某个玩家的总分了:

eval "local keys = redis.call('keys',KEYS[1]) ; local sum=0 ; for _,k in ipairs(keys) do sum = sum + tonumber(redis.call('get',k)) end ; return sum" 1 'playName-*'

更多高质量干货文章,请关注我的微信公众号 labuladong 和算法博客 labuladong 的算法秘籍

标签:connector,redis,Redis,Connector,topic,小游戏,sink,Pulsar
From: https://www.cnblogs.com/labuladong/p/17101523.html

相关文章

  • 用 Pulsar 开发多人小游戏(五):什么是 schema?为什么要用 schema?
    本文是《用Pulsar开发多人在线小游戏》的第三篇,配套源码和全部文档参见我的GitHub仓库play-with-pulsar以及我的文章列表。我推荐《数据密集型应用系统设计》这本......
  • 用 Pulsar 开发多人小游戏(六):用 Pulsar Function 制作房间计分板
    本文是《用Pulsar开发多人在线小游戏》的第三篇,配套源码和全部文档参见我的GitHub仓库play-with-pulsar以及我的文章列表。PulsarFunction允许你编写函数对top......
  • 用 Pulsar 开发多人小游戏(一):炸弹人游戏开发需求及难点
    我之前写过一篇文章我用消息队列做了个联机游戏用Pulsar这款消息队列实现了一个比较简陋的炸弹人游戏,结果不少读者对这个小游戏都很感兴趣,甚至在Pulsar的技术交流群......
  • Pulsar分布式消息系统
    说明ApachePulsar是Apache软件基金会顶级项目,是下一代云原生分布式消息流平台,集消息、存储、轻量化函数式计算为一体。该系统源于Yahoo,最初在Yahoo内部开发和部署......
  • 讨论|小游戏变现方式和未来可以拓展的空间
    截止2022年,微信小游戏开发者数量已经超过10万人次,特别是在持续出现小游戏爆火社交平台的趋势下,小游戏发展势头强劲。此外仅看微信小游戏的商业规模,2022年相较于2021年实现了......
  • 小游戏技术迭代,助力小游戏赛道飞速增长
    在过去的5年间,各大平台纷纷紧跟微信的步伐,纷纷进入游戏赛道,当前小游戏正在进入高速发展阶段。2022年微信小游戏官方数据显示,月流水破千万的小游戏新增爆款持续增长,并创造历......
  • Pulsar负载均衡原理及优化
    前言前段时间我们在升级Pulsar版本的时候发现升级后最后一个节点始终没有流量。虽然对业务使用没有任何影响,但负载不均会导致资源的浪费。和同事沟通后得知之前的......
  • Apache Pulsar 桌面端图形化管理工具
    ApachePulsar桌面端图形化管理工具ApachePulsar是Apache软件基金会顶级项目,是下一代云原生分布式消息流平台,集消息、存储、轻量化函数式计算为一体,采用计算与存储分......
  • 背单词小游戏需求文档
    背单词小游戏需求文档产品描述(益智游戏)本游戏尝试通过打怪方式激发一些需要记忆单词群体激情用户分析需要记忆单词对老旧背诵单词方式感到乏味、没有激情需要即......
  • 解决win7嵌入式系统无法DoublePulsar问题
    0x01前言渗透过程中总是会遇到千奇百怪的问题,比如前段时间内网横向时用MS17010打台win7,EternalBlue已经提示win了,可是DoublePulsar就是死活一直报错,最后我查阅大量资料,终......