ejabberd为游戏免除注册限制

(金庆的专栏 2016.11)

ejabberd聊天服务器默认会限制同一IP注册帐号须间隔600s。

在游戏中需要为每个角色注册一个聊天帐号,不应该有此限制。

可以更改服务器代码,为游戏服务器免除这一注册间隔时间。

假设游戏服用专用的帐号登录ejabberd, 然后为这种帐号免除注册限制。

在ejabberd.yml配置访问控制列表(ACL)中添加 game_master:

acl:
  game_master:
    user:
      - "game_master_1@localhost"
      - "game_master_2@localhost"

game_master 帐号预先创建,供游戏服务器登录ejabberd.

mod_register的配置中,将 “access_from: deny” 改为 “access_from: all”.

“access_from: deny” 表示任何用户都不能注册帐号,只能是登录前注册。

“access_from: all” 表示登录用户也能注册帐号。

这样game_master帐号先登录,然后就可以注册新帐号了。

添加 access_from_without_time_limit,允许game_master无注册限制。

mod_register:
    access_from: all
    access: register

    ## Allow some user register accounts without registration_timeout limit.
    access_from_without_time_limit:
      - allow: game_master

实际上也可以这样直接配置:

access_from_without_time_limit:
  - allow:
    - user: game_master_1@localhost
    - user: game_master_2@localhost

配置成 acl 的好处是,可以用

ejabberdctl reload_config

重新加载 acl, 而模块配置部分无法重新加载。

acl 配置还可以在 http admin 界面更改。

代码需稍加更改,修改mod_register.erl.

try_register/5 添加 From 参数改为 try_register/6

try_register(User, Server, Password, From, SourceRaw, Lang)

并将其中

case check_timeout(Source) of

改成

CheckTimeout = case check_from_without_time_limit(From, Server) of
    allow -> true;
    _ -> check_timeout(Source)
end,
case CheckTimeout of

即如果From是gm帐号时,CheckTimeout直接通过,不再判断600s的间隔。

check_from_without_time_limit/2 仿照check_from/2,这样实现:

check_from_without_time_limit(JID, Server) ->
    Access = gen_mod:get_module_opt(Server, ?MODULE, access_from_without_time_limit,
                                    fun(A) -> A end,
                                    none),
    acl:match_rule(Server, Access, JID).

添加:

mod_opt_type(access_from_without_time_limit) ->
    fun acl:access_rules_validator/1;
...
mod_opt_type(_) ->
    [..., access_from_without_time_limit, ...].

ejabberd为游戏免除注册限制的更多相关文章

  1. 使用Unity3D的设计思想实现一个简单的C#赛车游戏场景

    最近看了看一个C#游戏开发的公开课,在该公开课中使用面向对象思想与Unity3D游戏开发思想结合的方式,对一个简单的赛车游戏场景进行了实现.原本在C#中很方便地就可以完成的一个小场景,使用Unity3 ...

  2. 【技术】JavaSE环境下JPA实体类自动注册

    在没有容器支持的环境下,JPA的实体类(Entity)一般要在persistence.xml中逐个注册,类似下面这样: <?xml version="1.0" encodin ...

  3. [C++] 井字棋游戏源码

    TicTac.h #define EX 1 //该点左鼠标 #define OH 2 //该点右鼠标 class CMyApp : public CWinApp { public: virtual B ...

  4. [游戏学习22] MFC 井字棋 双人对战

    >_<:太多啦,感觉用英语说的太慢啦,没想到一年做的东西竟然这么多.....接下来要加速啦! >_<:注意这里必须用MFC和前面的Win32不一样啦! >_<:这也 ...

  5. [游戏学习26] MFC 时间函数 画图形

    >_<:这里第一次介绍MFC的时间函数,功能和Win32里的计时器类似. >_<:这里还介绍了MFC的图形绘制函数,和Win32有一点区别 >_<:ABC.h #d ...

  6. 小白学数据分析----->学习注册转化率

    你的注册转化率及格了吗? 注册转化率,一个基本上可以忽略的指标,虽然简单,但是却真实反映渠道,发行商,开发者的实力,以及对待产品的态度. 所谓的注册转化率,其实指的是玩家从下载游戏后,打开激活游戏,注 ...

  7. 游戏被App Store下架 如何快速上线?

    游戏被App Store下架 如何快速上线? 发布者: sea_bug | 发布时间: 2014-12-20 14:17| 评论数: 0 近日,有媒体报道出国内某家CP的产品被苹果从App Store ...

  8. lua脚本在游戏中的应用

    为什么要在游戏中使用脚本语言? 要解释这个问题首先我们先来了解一下脚本语言的特性: 学习门槛低,快速上手 开发成本低,可维护性强 动态语言,灵活性高 相对于C/C++这类高复杂性.高风险的编译型语言来 ...

  9. 自我介绍+github注册

    我是网络工程141的蒋易,学号是1413042018 个人兴趣:打篮球,打羽毛球,打游戏 github注册流程 id:Scorpio1 注册困难:1.刚开始网页没打开. 2.全英文的界面无法看懂,要查 ...

随机推荐

  1. logging的使用方法

    logging的使用方法 1,简单使用方法 >>> import logging >>> logging.warning('this is a warning') ...

  2. 谈mysql优化

    公司订单系统每日订单量庞大,有很多表数据超千万.公司SQL优化这块做的很不好,可以说是没有做,所以导致查询很慢. 节选某个功能中的一句SQL EXPLAIN查看执行计划,EXPLAIN + SQL 查 ...

  3. 【PYTHON】递加计数器

    计数本:number.txt 1 2 3 4 主程序:计数器 # Author: Stephen Yuan # 递加计算器 import os # 递加计算器 def calc(): file_siz ...

  4. xcode7,AFN不能使用的问题

    今天手贱立刻升级了Xcode7,结果AFN报错,且不能用了,解决办法如下 第一步:升级AFN到2.6.0 完成之后,运行,结果请求都失败,提示 The resource could not be lo ...

  5. HTTP与HTTPS

    一.HTTP和HTTPS的基本概念 HTTP:是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准(TCP),用于从WWW服务器传输超文本到本地浏览器的传输协议,它可以使浏览器 ...

  6. [Luogu 3919]【模板】可持久化数组(可持久化线段树/平衡树)

    Description 如题,你需要维护这样的一个长度为 N 的数组,支持如下几种操作 在某个历史版本上修改某一个位置上的值 访问某个历史版本上的某一位置的值 此外,每进行一次操作(对于操作2,即为生 ...

  7. [HNOI 2008]玩具装箱

    Description P教授要去看奥运,但是他舍不下他的玩具,于是他决定把所有的玩具运到北京.他使用自己的压缩器进行压 缩,其可以将任意物品变成一堆,再放到一种特殊的一维容器中.P教授有编号为1.. ...

  8. [测试题]wows

    Description 山山最近在玩一款游戏叫战舰世界(steam 游戏太少了),他被大舰巨炮的魅力折服,于是山山开了一局游戏,这次发现目标是一艘战列舰新墨西哥级,舰桥很高,原本应该打在目标身后的圆形 ...

  9. 51 nod 1610 路径计数(Moblus+dp)

    1610 路径计数 基准时间限制:1 秒 空间限制:131072 KB 分值: 80 难度:5级算法题   路径上所有边权的最大公约数定义为一条路径的值. 给定一个有向无环图.T次修改操作,每次修改一 ...

  10. ●BOZJ 4456 [Zjoi2016]旅行者

    题链: http://www.lydsy.com/JudgeOnline/problem.php?id=4456 题解: 分治好题.大致做法如下:对于一开始的矩形区域,过较长边的中点把矩形区域分为两个 ...