美文网首页
全服邮件

全服邮件

作者: 张广旭 | 来源:发表于2021-03-26 21:00 被阅读0次

创建全服邮件

  1. 写入数据库
  2. 写入redis
  • string: 以某个前缀加id作为key,value是msgpack序列化的结果
  • zset 记录global_email_id ,member是id,score是id

创建缓存:
创建一个goroutine专门做这个任务

  • 实现上面的写入redis功能,上面创建全服邮件时也调用这里的函数
  • 实现下面删除redis的功能,下面删除全服邮件那里的
  • 定时检测,每20分钟一次
    • 具体操作
      • 遍历globalemail表一批一批地获取email, 按id从小到大顺序获取
        • 对未删除的
          • 如果email对应的key没有,就插入
          • 如果zset中没有,就插入

删除全服邮件

  1. 数据库记录,设置deleted_at
  2. redis操作
  • 删除zset中的元素
  • 设置email对应的key的过期时间为30分钟

分发全服邮件:

  • 通过login触发, 在一个zset中记录uid(ZAddNX), member是uid,score是时间戳
  • 一个goroutine处理分发
    • BZPOPMIN 弹出uid
    • 通过GlobalEmailDist获取分发过的最大id
    • 从zset按批获取大于前面id的记录
    • 根据一组id获取redis的emailContent
    • 如果邮件创建时间大于user创建时间,就分发给user
    • 并修改GlobalEmailDist
    • 如果玩家online,就写入redis记录,记录user当前最大emailId(不是global email id) 过期时间:24小时

login:
把uid添加到上面的zset中

GetEmail:

  • 要处理全服邮件的情况(如果是全服邮件分发出来的,去redis获取全服邮件的相关信息)
  • 写一个lua脚本,如果从数据库获取到的email的最大id大于等于redis里面记录的emailid,就删除redis记录

通过心跳包实现软实时通知:

  1. email
  • 新email
    • 如果redis里有新邮件记录,那么就在心跳包resp通知客户端有新邮件(需要修改协议)

相关文章

  • 全服邮件

    创建全服邮件 写入数据库 写入redis string: 以某个前缀加id作为key,value是msgpack序...

  • 全区全服邮件如何设计

    这段时间在处理很多事情,主要涉及到框架和性能这块,其中一部分问题非常复杂,由于游戏类型及框架的区别,导致之前的某些...

  • 收发邮件

    在收发邮件时,你必需要有一个邮件帐户以及电子邮件服器。。 pop和smtp就是 电子邮件服器。比例:pop3.16...

  • SpringBoot(十三):JavaMailSender邮件服

    版权声明 本作品采用 知识共享署名 4.0 国际许可协议 进行许可。本文作者:低调小熊猫文章链接:https://...

  • 光遇代跑代肝

    iOS/安卓国服渠道服都可以接的哦~ 本人主玩iOS国服目前已经全图毕业啦! 质量有保障,可接献祭,全图烛火,全图...

  • 如何在Ubuntu 16.04上安装配置邮件发送服务器

    在Ubuntu 16.04 LTS上安装Postfix邮件系统,配置发送邮件服务器。 介绍 我有一台Ubuntu服...

  • 真正的离别总是悄然无声

    by绿绿空 记得四五年前玩手游,全服也就1500个人,因为开服就玩,到最后也能挤进全服前30。 可能因为人少,就会...

  • 《全服第一混分王[星际]》TXT全集下载

    《全服第一混分王[星际]》TXT全集下载 ➥下载地址 进入下载页面选择【普通下载】-【立即下载】即可! 全服第一混...

  • Prometheus邮件报警

    Alertmanager 配置服务 启动服务 配置邮件发送 prometheus配置文件 报警规则设置 实时检查服...

  • 不同类型游戏后台架构的思考

    目前接触的游戏主要有两类:分区分服,全区全服。 分区分服:如果从后台架构上做区分,分区分服特点: 1.每个服都有各...

网友评论

      本文标题:全服邮件

      本文链接:https://www.haomeiwen.com/subject/dgyshltx.html