# 7-公共API

下面是异步任务池的接口

# 异步线程池

# EmitOrder

  • 描述

    添加一个异步任务

  • 参数

    参数名 数据类型 说明
    key string/int 相同key的任务,线程池顺序执行;不同key的任务,线程池会并行执行。可以确认某些任务按照顺序执行。
    func function 任务对应的函数,该函数会在线程池中运行。该任务和主线程会并行执行,需要确认任务是线程安全的。函数必须返回一个元组,若返回为空则要求返回空元组("()")。函数输入参数是*args
    callback function 回调函数,它在主线程执行。func的返回值会是callback的实参。若没有回调,则传入None。
    *args *args func函数的非关键字参数
  • 返回值

  • 示例

import time
import apolloCommon.workerPool as workerPool
def Callbacks(idx, result):
        print "callbacks",idx, result
def Test(idx):
        print "test start %d" % idx
        time.sleep(1)
        print "test fin %d" % idx
        result = idx + 5
        return (idx, result)#任务必须有返回值。若没有返回值,请返回 "()"
ins = workerPool.ForkNewPool(4)
for i in xrange(4):
        #添加异步任务。i为奇数的任务顺序执行,i为偶数的任务顺序执行。这两批任务并行执行。
        ins.EmitOrder(i%2, Test, Callbacks, i)
ins.Finish(None) #等待线程池退出。

# Finish

  • 描述

    等待线程池退出,线程池会执行完所有异步任务后退出,会阻塞主线程。建议Mod退出时执行

  • 参数

    参数名 数据类型 说明
    timeout int 等待线程池退出时间,单位秒。若为None,则会一直等待。建议用None。
  • 返回值

  • 示例

import apolloCommon.workerPool as workerPool
ins = workerPool.ForkNewPool(4)
ins.Finish(None) #等待线程池退出。

# ForkNewPool

  • 描述

    创建线程池,设置线程池大小

  • 参数

    参数名 数据类型 说明
    orderSize int 线程池的大小
  • 返回值

    数据类型 说明
    MainPool 线程池实例
  • 示例

import apolloCommon.workerPool as workerPool
ins = workerPool.ForkNewPool(10)

下面是mysql线程池的接口

# mysql连接池

# AsyncExecuteFunctionWithOrderKey

  • 描述

    添加一个异步mysql任务,func将在子线程中执行,注意func中不支持执行引擎提供的API

  • 参数

    参数名 数据类型 说明
    func function mysql异步任务,可以没有返回值。该任务和主线程会并行执行,要求任务是线程安全的。第一个参数是一个mysql长连接,可以通过conn.cursor()获取cursor
    orderKey str/int 相同的orderKey会顺序执行,不同的orderKey会并行执行
    callback function 回调函数,只有一个输入参数,它在主线程执行。func的返回值会是callback的实参。若func抛出异常,则callback输入参数是None。若没有回调,则传入None
    *args *args func的其它非关键字参数
    **kwargs **kwargs 暂无用,预留用。
  • 返回值

  • 示例

def TestMysqlPoolCallback(records):
        if records is None:
                print "TestMysqlPoolCallback execute fail"
        else:
                print "TestMysqlPoolCallback execute success"
                for line in records:
                        print "single record=%s" % str(line)
def mysqlFunc(conn, num):
        cursor = conn.cursor()
        query = "SELECT * FROM neteaseUserMail LIMIT %s"
        params = (num, )
        try:
                cursor.execute(query, params)
                records = cursor.fetchall()
        except Exception as e:
                logout.error("mysqlFunc error=%s"%str(e))
                records = None
        finally:
                cursor.close()
        return records
#执行事务的一个示例
def mysqlTransactionTest(conn):
        conn.autocommit(False)
        cursor = conn.cursor()
        try:
                params = (2, 'test_items')
                query = "insert into neteaseCloudItems (uid, cloud_items) values (%s, %s)"
                cursor.execute(query, params)
                conn.commit()
        except:
                conn.rollback()
        finally:
                cursor.close()
                conn.autocommit(True)#请务必将连接还原
import apolloCommon.mysqlPool as mysqlPool
mysqlPool.InitDB(5)
mysqlPool.AsyncExecuteFunctionWithOrderKey(mysqlFunc, "global", TestMysqlPoolCallback, 5)
mysqlPool.AsyncExecuteFunctionWithOrderKey(mysqlTransactionTest, "test_trans", None)
mysqlPool.Finish()

# AsyncExecuteWithOrderKey

  • 描述

    添加一个异步mysql任务,执行所有mysql操作

  • 参数

    参数名 数据类型 说明
    orderKey str/int 相同的orderKey会顺序执行,不同的orderKey会并行执行
    sql str mysql查询语句,格式化字符串
    params tuple 填充sql
    callback function 回调函数,只有一个输入参数,它在主线程执行。func的返回值会是callback的实参。若func抛出异常,则callback输入参数是None。若没有回调,则传入None
  • 返回值

  • 示例

import apolloCommon.mysqlPool as mysqlPool
mysqlPool.InitDB(30)
def Cb(t):
        #插入成功情况下,t的值:True
        #插入失败情况下,t的值:False
        print "cb", t
#添加异步任务。
mysqlPool.AsyncExecuteWithOrderKey('player', 'insert into player values (%s, %s)', (1, "test1"), Cb)
mysqlPool.Finish()

# AsyncExecutemanyWithOrderKey

  • 描述

    添加一个异步mysql任务,针对同一条sql语句,使用paramsList中的每个参数各执行一次,并且返回成功修改/新建的记录数,其中任何一条语句执行失败,最终所有语句都会被执行失败,返回None

  • 参数

    参数名 数据类型 说明
    orderKey string/int 相同的orderKey会顺序执行,不同的orderKey会并行执行
    sql string mysql插入语句,格式化字符串
    callback function 回调函数,在主线程执行,只有唯一一个参数,成功修改/新建的记录数,假如sql执行失败,返回参数将会是None。若没有回调,则传入None
  • 返回值

  • 示例

import time
import apolloCommon.mysqlPool as mysqlPool
mysqlPool.InitDB(30)
def Cb(t):
        #插入成功情况下,t的值:3
        #插入失败情况下,可能出现部分数据插入成功问题,此时t的值:None
        print "cb", t
#添加异步任务。
mysqlPool.AsyncExecutemanyWithOrderKey('pay', 'insert into pay values (%s, %s)', [(1,"648"),(2,"328"), (3,"345")], Cb)
for i in xrange(100):
        mysqlPool.Tick()
        time.sleep(0.2)
mysqlPool.Finish()

# AsyncInsertOneWithOrderKey

  • 描述

    添加一个异步mysql任务,向主键为AUTO INCREASEl类型的表格中插入一条记录,并且返回新建记录的主键

  • 参数

    参数名 数据类型 说明
    orderKey string/int 相同的orderKey会顺序执行,不同的orderKey会并行执行
    sql string mysql插入语句,格式化字符串
    params tuple 填充sql
    callback function 回调函数,在主线程执行,只有唯一一个参数,是新建记录的主键,假如sql执行失败,返回参数将会是None。若没有回调,则传入None
  • 返回值

  • 示例

# 表testTable的创建语句如下
# CREATE TABLE IF NOT EXISTS `testTable` (
#       `id` bigint unsigned NOT NULL AUTO_INCREMENT,
#       `col_1` varchar(50) NOT NULL,
#       PRIMARY KEY (`uid`)
# ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
import apolloCommon.mysqlPool as mysqlPool
mysqlPool.InitDB(30)
def Cb(t):
        #插入成功情况下,t的一个示例值(也即表testTable中列id对应值):1
        #插入失败情况下,t的值:None
        print "cb", t
#添加异步任务。
mysqlPool.AsyncInsertOneWithOrderKey('pay', 'insert into testTable (col_1) values (%s)', ("648"), Cb)
mysqlPool.Finish()

# AsyncQueryWithOrderKey

  • 描述

    添加一个异步mysql任务,执行mysql查询

  • 参数

    参数名 数据类型 说明
    orderKey str/int 相同的orderKey会顺序执行,不同的orderKey会并行执行
    sql str mysql查询语句,格式化字符串
    params tuple 填充sql
    callback function 回调函数,只有一个输入参数,它在主线程执行。func的返回值会是callback的实参。若func抛出异常,则callback输入参数是None。若没有回调,则传入None
  • 返回值

  • 示例

import apolloCommon.mysqlPool as mysqlPool
mysqlPool.InitDB(30)
def Cb(t):
        #查询到一条记录情况下,t的一个示例值:((1L, u'test_name_1', 0L),)
        #查询为空情况下,t的值:()
        #查询报错情况,t的值:None
        print "cb", t
#添加异步任务。
mysqlPool.AsyncQueryWithOrderKey('player', 'select uid,name from player where uid = %s', (1,), Cb)
#等价于
#mysqlPool.AsyncQuery('player', 'select uid,name from player where uid = %s', (1,), Cb)
#orderKey都是'player',两个任务顺序执行。
mysqlPool.AsyncQueryWithOrderKey('player', 'select uid,name from player where uid = %s', (1,), Cb)
mysqlPool.Finish()

# Finish

  • 描述

    等待mysql线程池退出,会等待线程池中所有异步任务执行完毕后退出

  • 返回值

  • 示例

import apolloCommon.mysqlPool as mysqlPool
mysqlPool.Finish()

# InitDB

  • 描述

    初始化myqsl连接池,要求在MCStudio的“服务器配置”中配置mysql

  • 参数

    参数名 数据类型 说明
    poolSize int 连接池大小
  • 返回值

  • 示例

import apolloCommon.mysqlPool as mysqlPool
mysqlPool.InitDB(30)

# SyncFetchAll

  • 描述

    阻塞性执行sql语句,查询数据

  • 参数

    参数名 数据类型 说明
    sql string mysql查询语句,格式化字符串
    params tuple 填充sql
  • 返回值

    数据类型 说明
    None/list 错误返回None,否则返回列表,列表中每个元素表示一条查询记录
  • 备注

    建议只在初始化mod时执行这个api,不要在运行期间执行本api。它会阻塞主流程,可能导致服务器卡顿。

  • 示例

import apolloCommon.mysqlPool as mysqlPool
sql = 'select _id, name from test_user where _id > %s'
#查询成功情况下,allRecords的一个示例值:((1L, u'test_name_1', 0L), (2L, u'test22', 2222L), (3L, u'test33', 333L))
#查询失败情况下,allRecords的值:None
allRecords = mysqlPool.SyncFetchAll(sql, (0, ))
for record in allRecords:
        user['_id'] = record[0]#对应select后的第一个字段
        user['name'] = record[1]#对应select后的第二个字段

# SyncInsert

  • 描述

    阻塞性执行sql语句,插入数据

  • 参数

    参数名 数据类型 说明
    sql string mysql查询语句,格式化字符串
    params tuple 填充sql
  • 返回值

    数据类型 说明
    None/id 错误返回None,否则返回成功插入的id
  • 备注

    建议只在初始化mod时执行这个api,不要在运行期间执行本api。它会阻塞主流程,可能导致服务器卡顿。

  • 示例

import apolloCommon.mysqlPool as mysqlPool
sql = 'insert into test_user(name, age) values(%s, %s)'
#插入成功情况下,返回值是插入的主键id
#插入失败情况下,返回值是0
insertId = mysqlPool.SyncInsert(sql, ("steve", 20))

下面是redis线程池的接口

# redis连接池

# AsyncDelete

  • 描述

    执行redis操作,删除某个redis key,相当于redis中执行命令:del key

  • 参数

    参数名 数据类型 说明
    key string redis中的key
    callback function 回调函数,输入参数是redis操作返回值,是个int,表示删除redis key的个数 ,它在主线程执行。可以不传入回调函数。若redis操作抛出异常,则callback输入参数是None。若没有回调,则传入None
  • 返回值

  • 示例

import apolloCommon.redisPool as redisPool
def Cb1(t):
        #执行成功且redis key "player_121"存在情况下,t的值:1
        #执行成功且redis key "player_121"不存在情况下,t的值:0
        #执行失败时,t的值:None
        print "cb", t
redisPool.InitDB(30) #建立连接池
redisPool.AsyncDelete('player_121', cb1)
redisPool.Finish()

# AsyncFuncWithKey

  • 描述

    添加一个异步redis任务

  • 参数

    参数名 数据类型 说明
    func function redis异步任务,可以没有返回值。该任务和主线程会并行执行,要求任务是线程安全的。第一个参数是一个redis长连接,是一个redis.StrictRedis实例,其他参数是*args
    orderKey str/int 相同的orderKey会顺序执行,不同的orderKey会并行执行
    callback function 回调函数,只有一个输入参数,它在主线程执行。func的返回值是callback的输入参数。若func抛出异常,则callback输入参数是None。若没有回调,则传入None
    *args *args func的其它非关键字参数
    **kwargs **kwargs 暂无用,预留用。
  • 返回值

  • 示例

import apolloCommon.redisPool as redisPool
redisPool.InitDB(30) #建立连接池
#回调,可以获取player的信息。这里只是打印结果。
def Cb1(t):
        #执行成功且存在redis key "player_123"情况下,t的一个示例值:'test_string_value'
        #执行成功且不存在redis key "player_123"情况下,t的值:""
        #执行失败时,key的值:None
        print "cb", t
#第一个参数是redis.StrictRedis实例。
def GetValueFromKey(conn, key):
        ret = conn.get(key)
        return ret if ret is not None else ""
#插入一个任务,从redis中获取uid为123玩家的信息。
redisPool.AsyncFuncWithKey(GetValueFromKey, "player_123", Cb1, 123)
#插入同样任务,orderKey都是“player_123”,因此两个任务会顺序执行。
redisPool.AsyncFuncWithKey(GetValueFromKey, "player_123", Cb1, 123)
redisPool.Finish()

# AsyncGet

  • 描述

    执行redis操作,获取key的value,相当于redis中执行命令:get key

  • 参数

    参数名 数据类型 说明
    key str redis中的key
    callback function 回调函数,默认为空。函数输入参数是redis key对应的value字符串,它在主线程执行。若redis操作抛出异常,则callback输入参数是None。若没有回调,则传入None
  • 返回值

  • 示例

import apolloCommon.redisPool as redisPool
def Cb1(t):
        #执行成功且存在redis key "player_123"情况下,t的一个示例值:'test_string_value'
        #执行成功且不存在redis key "player_123"情况下,t的值:None
        #执行失败时,key的值:None
        print "cb", t
redisPool.InitDB(30) #建立连接池
redisPool.AsyncGet("player_123", Cb1)
redisPool.Finish()

# AsyncHgetall

  • 描述

    执行redis操作,获取key的value,相当于redis中执行命令:hgetall key

  • 参数

    参数名 数据类型 说明
    key string redis中的key
    callback function 回调函数,输入参数是redis key对应的值,是个dict,它在主线程执行。可以不传入回调函数。若redis操作抛出异常,则callback输入参数是None。若没有回调,则传入None
  • 返回值

  • 示例

import apolloCommon.redisPool as redisPool
def Cb1(t):
        #执行成功且redis key "player_123"不为空情况下,t的一个示例值:{'name': 'name', 'lv': '2'}
        #执行成功且redis key "player_123"为空情况下,t的值:{}
        #执行失败时,t的值:None
        print "cb", t
redisPool.InitDB(30) #建立连接池
redisPool.AsyncHgetall("h_player_123", Cb1)
redisPool.Finish()

# AsyncMget

  • 描述

    执行redis操作,获取多个key的值,相当于redis中执行命令:mget key1 key2 ...

  • 参数

    参数名 数据类型 说明
    key list/tuple 多个redis中的key
    callback function 回调函数,默认为空。函数输入参数redis操作返回值, 是个列表,每个元素对应单个redis key的值,它在主线程执行。若redis操作抛出异常,则callback输入参数是None。若没有回调,则传入None
  • 返回值

  • 示例

import apolloCommon.redisPool as redisPool
def Cb1(t):
        #执行成功且redis key "test_value_None"不存在情况下,t的一个示例值:{'1': 'str', None}
        #执行失败时,t的值:None
        print "cb", t
redisPool.InitDB(30) #建立连接池
keys = ("test_value_1", "test_value_str", "test_value_None")
redisPool.AsyncMget(keys, Cb1)
redisPool.Finish()

# AsyncSet

  • 描述

    执行redis操作,设置key的值为value,相当于redis中执行命令:set key value

  • 参数

    参数名 数据类型 说明
    key string redis中的key
    value string redis中key的值
    callback function 回调函数,默认为空。函数输入参数是redis操作返回值,True表示设置成功,False失败。 若redis操作抛出异常,则callback输入参数是None。若没有回调,则传入None
  • 返回值

  • 示例

import apolloCommon.redisPool as redisPool
redisPool.InitDB(30) #建立连接池
def cb1(t):
        #执行成功时,t的值:True
        #执行失败时,t的值:False
        print "cb", t
redisPool.AsyncSet('player_123', "{'name':'nickname'}", cb1)
redisPool.Finish()

# Finish

  • 描述

    等待redis线程池退出,会等待线程池中所有异步任务执行完毕后退出

  • 返回值

  • 示例

import apolloCommon.redisPool as redisPool
redisPool.InitDB(30) #建立连接池
#添加异步任务。在redis中执行:set "key1", "value11"
redisPool.AsyncSet("key1", "value11")
redisPool.Finish()

# InitDB

  • 描述

    初始化redis连接池,要求在MCStudio的“服务器配置”中配置redis

  • 参数

    参数名 数据类型 说明
    poolSize int 连接池大小
  • 返回值

  • 示例

import apolloCommon.redisPool as redisPool
redisPool.InitDB(30)

下面是mongo线程池的接口

# mongo连接池

# AsyncExecute

  • 描述

    添加一个异步mongo任务

  • 参数

    参数名 数据类型 说明
    collection str mongo中的一个集合,相同集合的所有操作串行执行,不同集合操作并行执行
    func function mongo异步任务,可以没有返回值。该任务和主线程会并行执行,要求任务是线程安全的。第一个参数是一个mongo长连接,是pymongo.MongoClient连接池实例中的一个连接
    callback function 回调函数,只有一个输入参数,它在主线程执行。func的返回值会是callback的实参。若func抛出异常,则callback输入参数是None。若没有回调,则传入None
    *args *args func的其它非关键字参数
    **kwargs **kwargs 暂无用,预留用
  • 返回值

  • 备注

    query mongo数据库返回的字典中,大于signed int的整数,返回的数据类型并不是int,而是bson.int64.Int64(虽然直接打印的结果类似【50000L】),bson.int64.Int64类型的数据无法作为eventData发送给客户端或功能服,需要使用API:ConvertBsonToInt转换为Int类型

  • 示例

import apolloCommon.mongoPool as mongoPool
mongoPool.InitDB(32)
def Insert(col):
        postData = {
                'title': 'Python and MongoDB',
                'content': 'PyMongo is fun, you guys',
                'author': 'Scott'
        }
        col.insert_one(postData)
def Cb(t):
        print "cb", t
#添加异步任务。
mongoPool.AsyncExecute("test_col", Insert, Cb)
mongoPool.Finish()

# AsyncExecuteWithOrderKey

  • 描述

    添加一个异步mongo任务。同async_execute区别是,可以显示设置orderKey

  • 参数

    参数名 数据类型 说明
    collection str mongo中的一个集合
    func function mongo异步任务,可以没有返回值。该任务和主线程会并行执行,要求任务是线程安全的。第一个参数是一个mongo长连接,是pymongo.MongoClient连接池实例中的一个连接
    orderKey str/int 相同的orderKey会顺序执行,不同的orderKey会并行执行
    callback function 回调函数,只有一个输入参数,它在主线程执行。func的返回值会是callback的实参。若func抛出异常,则callback输入参数是None。若没有回调,则传入None
    *args *args func的其它非关键字参数
    **kwargs **kwargs 暂无用,预留用。
  • 返回值

  • 备注

    query mongo数据库返回的字典中,大于signed int的整数,返回的数据类型并不是int,而是bson.int64.Int64(虽然直接打印的结果类似【50000L】),bson.int64.Int64类型的数据无法作为eventData发送给客户端或功能服,需要使用API:ConvertBsonToInt转换为Int类型

  • 示例

import apolloCommon.mongoPool as mongoPool
mongoPool.InitDB(32)
def Insert(col):
        postData = {
                'title': 'Python and MongoDB',
                'content': 'PyMongo is fun, you guys',
                'author': 'Scott'
        }
        col.insert_one(postData)
def Cb(t):
        print "cb", t
#添加异步任务。
#下面操作相当于:mongoPool.AsyncExecute("test_col", Insert, Cb)
mongoPool.AsyncExecuteWithOrderKey("test_col", Insert, "test_col", Cb)
#添加相同任务,两个任务顺序执行。
mongoPool.AsyncExecuteWithOrderKey("test_col", Insert, "test_col", Cb)
mongoPool.Finish()

# Finish

  • 描述

    等待mongo线程池退出,会等待线程池中所有异步任务执行完毕后退出

  • 返回值

  • 示例

import apolloCommon.mongoPool as mongoPool
mongoPool.InitDB(32)
mongoPool.Finish()

# InitDB

  • 描述

    初始化mongo连接池,要求在MCStudio的“服务器配置”中配置mongo

  • 参数

    参数名 数据类型 说明
    poolSize int 连接池大小
  • 返回值

  • 示例

import apolloCommon.mongoPool as mongoPool
mongoPool.InitDB(32)

下面是mysql扩展线程池的一些接口

# mysql连接池扩展

# AsyncExecuteWithOrderKey

  • 描述

    添加一个异步mysql任务,执行所有mysql操作。同AsyncExecute的区别是可以显示指定orderKey

  • 参数

    参数名 数据类型 说明
    dbName string mysql db名字,名字在deploy.json中extra_mysql下配置,具体参见InitDB备注说明
    orderKey string/int 相同的orderKey会顺序执行,不同的orderKey会并行执行
    sql string mysql查询语句,格式化字符串
    params tuple 填充sql
    callback function 回调函数,只有一个输入参数,它在主线程执行。func的返回值会是callback的实参。若func抛出异常,则callback输入参数是None。若没有回调,则传入None
  • 返回值

  • 示例

import apolloCommon.extraMysqlPool as extraMysqlPool
extraMysqlPool.InitDB('mysql_test1', 30)
def Cb(t):
        print "cb", t
#添加异步任务
extraMysqlPool.AsyncExecuteWithOrderKey('mysql_test1', 'player', 'insert into player values (%s, %s)', (1, "test1"), Cb)
extraMysqlPool.Finish()

# AsyncQueryWithOrderKey

  • 描述

    添加一个异步mysql任务,执行mysql查询。同AsyncQuery区别是可以显示指定orderKey

  • 参数

    参数名 数据类型 说明
    dbName string mysql db名字,名字在deploy.json中extra_mysql下配置,具体参见InitDB备注说明
    orderKey string/int 相同的orderKey会顺序执行,不同的orderKey会并行执行
    sql string mysql查询语句,格式化字符串
    params tuple 填充sql
    callback function 回调函数,只有一个输入参数,它在主线程执行。func的返回值会是callback的实参。若func抛出异常,则callback输入参数是None。若没有回调,则传入None
  • 返回值

  • 示例

import apolloCommon.extraMysqlPool as extraMysqlPool
extraMysqlPool.InitDB('mysql_test1', 30)
def Cb(t):
        print "cb", t
#添加异步任务
extraMysqlPool.AsyncQueryWithOrderKey('mysql_test1', 'player', 'select uid,name from player where uid = %s', (1,), Cb)
#orderKey都是'player',两个任务顺序执行
extraMysqlPool.AsyncQueryWithOrderKey('mysql_test1','player', 'select uid,name from player where uid = %s', (1,), Cb)
extraMysqlPool.Finish()

# Finish

  • 描述

    等待mysql线程池退出,会等待线程池中所有异步任务执行完毕后退出

  • 返回值

  • 示例

import apolloCommon.extraMysqlPool as extraMysqlPool
extraMysqlPool.Finish()

# InitDB

  • 描述

    初始化mysql连接池。可以支持多个mysql实例,它可以同“mysql连接池”一起使用。MCStudio打开配置文件目录,在deploy.json文件中配置extra_mysql,配置方法参见备注

  • 参数

    参数名 数据类型 说明
    dbName string mysql db名字,名字在deploy.json中extra_mysql下配置,比如示例配置中 “mysql_test1”
    poolSize int 连接池大小
  • 返回值

  • 备注

    deploy.json中部分配置的示例如下:

    "mysql": {
    "database": "mod_test",
    "host": "127.0.0.1",
    "password": "test",
    "port": 3306,
    "user": "test"
    },
    "extra_mysql":{
    "test1":{
    "database": "mysql_test1",
    "host": "127.0.0.2",
    "password": "test",
    "port": 3306,
    "user": "test"
    },
    "test2":{
    "database": "mysql_test2",
    "host": "127.0.0.3",
    "password": "test",
    "port": 3306,
    "user": "test"
    }
    },
    
  • 示例

import apolloCommon.extraMysqlPool as extraMysqlPool
extraMysqlPool.InitDB('mysql_test1', 30)

下面是redis扩展线程池的一些接口

# redis连接池扩展

# AsyncDelete

  • 描述

    执行redis操作,删除某个redis key,相当于redis中执行命令:del key

  • 参数

    参数名 数据类型 说明
    dbName str redis db名字,名字对应MCStudio中新增redis实例的实例名称
    key str redis中的key
    callback function 回调函数,默认为空。函数输入参数是redis操作返回值,是个int,表示删除redis key的个数 ,它在主线程执行。若redis操作抛出异常,则callback输入参数是None。若没有回调,则传入None
  • 返回值

  • 示例

import apolloCommon.extraRedisPool as extraRedisPool
def Cb1(t):
        print "cb", t
extraRedisPool.InitDB('extra_redis1', 30) #建立连接池
extraRedisPool.AsyncDelete('extra_redis1', 'player_121', Cb1)
extraRedisPool.Finish()

# AsyncFuncWithKey

  • 描述

    添加一个异步redis任务

  • 参数

    参数名 数据类型 说明
    dbName str redis db名字,名字对应MCStudio中新增redis实例的实例名称
    func function redis异步任务,可以没有返回值。该任务和主线程会并行执行,要求任务是线程安全的。第一个参数是一个redis长连接,是一个redis.StrictRedis实例,其他参数是*args
    orderKey str/int 相同的orderKey会顺序执行,不同的orderKey会并行执行
    callback function 回调函数,只有一个输入参数,它在主线程执行。func的返回值是callback的输入参数。若func抛出异常,则callback输入参数是None。若没有回调,则传入None
    *args *args func的其它非关键字参数
    **kwargs **kwargs 暂无用,预留用
  • 返回值

  • 示例

import apolloCommon.extraRedisPool as extraRedisPool
extraRedisPool.InitDB('extra_redis1', 30) #建立连接池
#回调,可以获取player的信息。这里只是打印结果。
def Cb1(t):
        print "cb", t
#第一个参数是redis.StrictRedis实例。
def GetValueFromKey(conn, key):
        return conn.get(key)
#插入一个任务,从redis中获取uid为123玩家的信息。
extraRedisPool.AsyncFuncWithKey('extra_redis1', GetValueFromKey, 'player_123', Cb1, 123)
#插入同样任务,orderKey都是“player_123”,因此两个任务会顺序执行。
extraRedisPool.AsyncFuncWithKey('extra_redis1', GetValueFromKey, 'player_123', Cb1, 123)
extraRedisPool.Finish()

# AsyncGet

  • 描述

    执行redis操作,获取key的value,相当于redis中执行命令:get key

  • 参数

    参数名 数据类型 说明
    dbName str redis db名字,名字对应MCStudio中新增redis实例的实例名称
    key str redis中的key
    callback function 回调函数,默认为空。函数输入参数是redis key对应的value字符串,它在主线程执行。若redis操作抛出异常,则callback输入参数是None。若没有回调,则传入None
  • 返回值

  • 示例

import apolloCommon.extraRedisPool as extraRedisPool
def Cb1(t):
        print "cb", t
extraRedisPool.InitDB('extra_redis1', 30) #建立连接池
extraRedisPool.AsyncGet('extra_redis1','player_123', Cb1)
extraRedisPool.Finish()

# AsyncHgetall

  • 描述

    执行redis操作,获取key的value,相当于redis中执行命令:hgetall key

  • 参数

    参数名 数据类型 说明
    dbName str redis db名字,名字对应MCStudio中新增redis实例的实例名称
    key str redis中的key
    callback function 回调函数,默认为空,函数输入参数是redis key对应的值,是个dict,它在主线程执行。若redis操作抛出异常,则callback输入参数是None。若没有回调,则传入None
  • 返回值

  • 示例

import apolloCommon.extraRedisPool as extraRedisPool
def Cb1(t):
        print "cb", t
extraRedisPool.InitDB('extra_redis1', 30) #建立连接池
extraRedisPool.AsyncHgetall('extra_redis1', 'player_123', Cb1)
extraRedisPool.Finish()

# AsyncMget

  • 描述

    执行redis操作,获取多个key的值,相当于redis中执行命令:mget key1 key2 ...

  • 参数

    参数名 数据类型 说明
    dbName str redis db名字,名字对应MCStudio中新增redis实例的实例名称
    keys list/tuple 多个redis key
    callback function 回调函数,默认为空,函数输入参数redis操作返回值, 是个列表,每个元素对应单个redis key的值,它在主线程执行。若redis操作抛出异常,则callback输入参数是None
  • 返回值

  • 示例

import apolloCommon.extraRedisPool as extraRedisPool
def Cb1(t):
        print "cb", t
extraRedisPool.InitDB('extra_redis1', 30) #建立连接池
keys = ('player_121', 'player_122')
extraRedisPool.AsyncMget('extra_redis1', keys, Cb1)
extraRedisPool.Finish()

# AsyncSet

  • 描述

    执行redis操作,设置key的值为value,相当于redis中执行命令:set key value

  • 参数

    参数名 数据类型 说明
    dbName str redis db名字,名字对应MCStudio中新增redis实例的实例名称
    key str redis中的key
    value str redis中key的值
    callback function 回调函数,默认为空。函数输入参数是redis操作返回值,True表示设置成功,False失败。 若redis操作抛出异常,则callback输入参数是None。若没有回调,则传入None
  • 返回值

  • 示例

import apolloCommon.extraRedisPool as extraRedisPool
extraRedisPool.InitDB('extra_redis1', 30) #建立连接池
extraRedisPool.AsyncSet('extra_redis1', 'player_123', "{'name':'nickname'}")
extraRedisPool.Finish()

# Finish

  • 描述

    等待redis db线程池退出,会等待线程池中所有异步任务执行完毕后退出

  • 返回值

  • 示例

import apolloCommon.extraRedisPool as extraRedisPool
extraRedisPool.InitDB('extra_redis1', 30) #建立连接池
#回调,可以获取player的信息。这里只是打印结果。
def Cb1(t):
        print "cb", t
#第一个参数是redis.StrictRedis实例。
def GetValueFromKey(conn, key):
        return conn.get(key)
#插入一个任务,从redis中获取uid为123玩家的信息。
extraRedisPool.AsyncFuncWithKey('extra_redis1', GetValueFromKey, 'player_123', Cb1, 123)
extraRedisPool.Finish()

# InitDB

  • 描述

    初始化redis连接池,要求在MCStudio的“服务器配置”中“新增redis实例”

  • 参数

    参数名 数据类型 说明
    dbName str redis实例名字,对应MCStudio中redis“实例名称”配置
    poolSize int 连接池大小
  • 返回值

  • 示例

import apolloCommon.extraRedisPool as extraRedisPool
extraRedisPool.InitDB('extra_redis1', 30)

下面是mongo扩展线程池的一些接口

# mongo连接池扩展

# AsyncExecute

  • 描述

    添加一个异步mongo任务

  • 参数

    参数名 数据类型 说明
    dbName str mongo db名字,名字在deploy.json中extra_mongo下配置,具体参见InitDB备注说明
    collection str mongo中的一个集合,相同集合的所有操作串行执行,不同集合操作并行执行
    func function mongo异步任务,可以没有返回值。该任务和主线程会并行执行,要求任务是线程安全的。第一个参数是一个mongo长连接,是pymongo.MongoClient连接池实例中的一个连接
    callback function 回调函数,只有一个输入参数,它在主线程执行。func的返回值会是callback的实参。若func抛出异常,则callback输入参数是None。若没有回调,则传入None
    *args *args func的非关键字参数
    **kwargs **kwargs 暂无用,预留用
  • 返回值

  • 示例

import apolloCommon.extraMongoPool as extraMongoPool
extraMongoPool.InitDB('mongo_test1', 32)
def Insert(col):
        postData = {
                'title': 'Python and MongoDB',
                'content': 'PyMongo is fun, you guys',
                'author': 'Scott'
        }
        col.insert_one(postData)
def Cb(t):
        print "cb", t
#添加异步任务。
extraMongoPool.AsyncExecute('mongo_test1', 'test_col', Insert, Cb)
extraMongoPool.Finish()

# AsyncExecuteWithOrderKey

  • 描述

    添加一个异步mongo任务。同async_execute区别是,可以显示设置orderKey

  • 参数

    参数名 数据类型 说明
    dbName str mongo db名字,名字在deploy.json中extra_mongo下配置,具体参见InitDB备注说明
    collection str mongo中的一个集合
    func function mongo异步任务,可以没有返回值。该任务和主线程会并行执行,要求任务是线程安全的。第一个参数是一个mongo长连接,是pymongo.MongoClient连接池实例中的一个连接,其他参数是*args
    orderKey str/int 相同的orderKey会顺序执行,不同的orderKey会并行执行
    callback function 回调函数,只有一个输入参数,它在主线程执行。func的返回值会是callback的实参。若func抛出异常,则callback输入参数是None。若没有回调,则传入None
    *args *args func的非关键字参数
    **kwargs **kwargs 暂无用,预留
  • 返回值

  • 示例

import apolloCommon.extraMongoPool as extraMongoPool
extraMongoPool.InitDB('mongo_test1', 32)
def Insert(col):
        postData = {
                'title': 'Python and MongoDB',
                'content': 'PyMongo is fun, you guys',
                'author': 'Scott'
        }
        col.insert_one(postData)
def Cb(t):
        print "cb", t
#添加异步任务
#下面操作相当于:apolloCommon.AsyncExecute('mongo_test1', 'test_col', Insert, Cb)
apolloCommon.AsyncExecuteWithOrderKey('mongo_test1', 'test_col', Insert, 'test_col', Cb)
#添加相同任务,两个任务顺序执行
apolloCommon.AsyncExecuteWithOrderKey('mongo_test1', 'test_col', Insert, 'test_col', Cb)
apolloCommon.Finish()

# Finish

  • 描述

    等待mongo线程池退出,会等待线程池中所有异步任务执行完毕后退出

  • 返回值

  • 示例

import apolloCommon.extraMongoPool as extraMongoPool
extraMongoPool.Finish()

# InitDB

  • 描述

    初始化mongo连接池。可以支持多个mongo实例,它可以同“mongo连接池”一起使用。MCStudio打开配置文件目录,在deploy.json文件中配置extra_mongo,配置方法参见备注

  • 参数

    参数名 数据类型 说明
    dbName str mongo db名字,名字在deploy.json中extra_mongo下配置,比如示例配置中 “mongo_test1”
    poolSize int 连接池大小
  • 返回值

  • 备注

    deploy.json部分配置的示例如下:

    "mongo": {
    "database": "test",
    "host": "127.0.0.1",
    "password": "test",
    "port": 27017,
    "user": "test"
    },
    "extra_mongo":{
    "testname1" : {
    "database": "mongo_test1",
    "host": "127.0.0.2",
    "password": "test",
    "port": 27017,
    "user": "test"
    },
    "testname2" : {
    "database": "mongo_test2",
    "host": "127.0.0.3",
    "password": "test",
    "port": 27017,
    "user": "test"
    }
    },
    
  • 示例

import apolloCommon.extraMongoPool as extraMongoPool
extraMongoPool.InitDB('mongo_test1', 30)

下面是公共的接口

# 通用

# ChangeDatabaseSlowLogLimit

  • 描述

    修改数据库连接池慢请求报警日志限定时间

  • 参数

    参数名 数据类型 说明
    db str 数据库连接池类型,mysql/redis/mongo
    interval float 慢请求限制时间,单个请求返回时间超过这个值就会记录慢请求日志,单位秒,mysql和mongo默认配置值为1.0秒,redis默认配置为0.1秒
  • 返回值

    数据类型 说明
    bool 执行结果
  • 示例

import apolloCommon.commonNetgameApi as commonNetgameApi
suc = commonNetgameApi.ChangeDatabaseSlowLogLimit("mysql", 0.1)
print "ChangeDatabaseSlowLogLimit for mysql suc=%s" % suc

# CheckNameValid

  • 描述

    判定一个输入的string是否通过了命名库敏感词检查,没有敏感词返回1,存在敏感词返回0

  • 参数

    参数名 数据类型 说明
    name str 需要做敏感词检查的string
  • 返回值

    数据类型 说明
    int 1代表没有敏感词,0代表存在敏感词
  • 示例

import apolloCommon.commonNetgameApi as commonNetgameApi
isOk = commonNetgameApi.CheckNameValid("xxxxxx")
if not isOk:
        print "输入中存在敏感词"
        return

# CheckWordsValid

  • 描述

    判定一个输入的string是否通过了通用库敏感词检查,没有敏感词返回1,存在敏感词返回0

  • 参数

    参数名 数据类型 说明
    words str 需要做敏感词检查的string
  • 返回值

    数据类型 说明
    int 1代表没有敏感词,0代表存在敏感词
  • 示例

import apolloCommon.commonNetgameApi as commonNetgameApi
isOk = commonNetgameApi.CheckSensitiveByName("xxxxxx")
if not isOk:
        print "输入中存在敏感词"
        return

# CloseAsyncTaskSlowCheck

  • 描述

    停止每帧检查异步线程池中的任务

  • 返回值

    数据类型 说明
    bool 执行结果
  • 示例

import apolloCommon.commonNetgameApi as commonNetgameApi
commonNetgameApi.CloseAsyncTaskSlowCheck()

# ConvertBsonToInt

  • 描述

    递归转换输入数据中的所有bson.int64.Int64类型的对象为int类型

  • 参数

    参数名 数据类型 说明
    input dict/list/tuple/str/unicode 需要转换的输入数据
  • 返回值

    数据类型 说明
    dict/list/tuple/str/unicode 和输入数据格式相同,其中bson.int64.Int64类型的对象会被转换为int类型
  • 示例

import apolloCommon.commonNetgameApi as commonNetgameApi
import bson
bsonInt = bson.Int64(5000000000)
input = {
        "a1": bsonInt,
        "a2": [bsonInt, bsonInt],
        "a3": (bsonInt, bsonInt),
}
ret = commonNetgameApi.ConvertBsonToInt(input)

# DumpAsyncTaskPool

  • 描述

    打印当前异步线程池中的正在排队和执行中的任务信息

  • 返回值

    数据类型 说明
    bool 执行结果
  • 示例

import apolloCommon.commonNetgameApi as commonNetgameApi
commonNetgameApi.DumpAsyncTaskPool()

# GetApolloGameId

  • 描述

    获取游戏当前项目的gameId(商城查询订单时需要)

  • 返回值

    数据类型 说明
    int 游戏当前项目的gameId
  • 示例

import apolloCommon.commonNetgameApi as commonNetgameApi
gameId = commonNetgameApi.GetApolloGameId()

# GetApolloGameKey

  • 描述

    获取游戏当前项目的gameKey(商城查询订单时需要)

  • 返回值

    数据类型 说明
    int 游戏当前项目的gameKey
  • 示例

import apolloCommon.commonNetgameApi as commonNetgameApi
gameKey = commonNetgameApi.GetApolloGameKey()

# GetApolloReviewStage

  • 描述

    获取游戏当前审核阶段

  • 返回值

    数据类型 说明
    int 0 测试阶段,1 审核阶段 2 上线阶段
  • 示例

import apolloCommon.commonNetgameApi as commonNetgameApi
reviewStage = commonNetgameApi.GetApolloReviewStage()

# GetApolloUniqueId

  • 描述

    获取游戏当前项目唯一ID

  • 返回值

    数据类型 说明
    int 游戏当前项目唯一ID
  • 示例

import apolloCommon.commonNetgameApi as commonNetgameApi
apolloId = commonNetgameApi.GetApolloUniqueId()

# GetModJsonConfig

  • 描述

    根据脚本根目录读取mod.json配置文件。要求mod已经被加载

  • 参数

    参数名 数据类型 说明
    scriptRootName str python脚本的根目录名
  • 返回值

    数据类型 说明
    dict mod.json里面的内容信息
  • 示例

#目录结构
# |-developer_mods
#       |- neteaseNpcLobbyDev
#               mod.json
#               |- neteaseNpcLobby
import apolloCommon.commonNetgameApi as commonNetgameApi
confDict = commonNetgameApi.GetModJsonConfig("neteaseNpcLobby")
print confDict["description"]#打印mod.json中description配置内容
#mod.json取出的字符串都是unicode编码。若是中文,需要手动转成UTF-8编码。转码方法如下:
npcName = confDict["name"].encode('utf-8')

# GetModJsonConfigByName

  • 描述

    读取基于脚本根目录的[pathFile]路径下的json格式配置文件

  • 参数

    参数名 数据类型 说明
    scriptRootName str python脚本的根目录名
    pathFile str 相对于python脚本的根目录的文件名(包括相对路径)
  • 返回值

    数据类型 说明
    dict 对应目录下json文件里面的内容信息
  • 示例

#目录结构
# |-developer_mods
#       |- neteaseNpcLobbyDev
#               mod.json
#               |- neteaseNpcLobby
#               |- modData
#                       skill1.json
import apolloCommon.commonNetgameApi as commonNetgameApi
confDict = commonNetgameApi.GetModJsonConfig("neteaseNpcLobby", "modData/skill1.json")
print confDict # 打印skill1.json文件的内容
#json取出的字符串都是unicode编码。若是中文,需要手动转成UTF-8编码。转码方法如下:
npcName = confDict["name"].encode('utf-8')

# GetModScriptRootDir

  • 描述

    获取脚本根目录的绝对路径。要求mod已经被加载

  • 参数

    参数名 数据类型 说明
    scriptRootName str python脚本的根目录名
  • 返回值

    数据类型 说明
    str 脚本根目录的绝对路径
  • 示例

#目录结构
# |-developer_mods
#       |- neteaseNpcLobbyDev
#               mod.json
#               |- neteaseNpcLobby
import apolloCommon.commonNetgameApi as commonNetgameApi
commonNetgameApi.GetModScriptRootDir("neteaseNpcLobby")
#结果:/home/fuzhu/netgame/app/template/lobby/lobby_lobby_2000000/developer_mods/neteaseNpcLobbyDev/

# GetServerType

  • 描述

    获取本服的服务器类型,对应MCStudio中配置:服务器配置->游戏配置->类型

  • 返回值

    数据类型 说明
    str 服务器类型
  • 示例

import apolloCommon.commonNetgameApi as commonNetgameApi
commonNetgameApi.GetServerType() #结果是:"gameBattleA"

# OpenAsyncTaskSlowCheck

  • 描述

    启动每帧检查异步线程池中的任务,并且打印执行时间超过指定时间且尚未完成的任务,此功能消耗较大,仅建议在测试阶段和遇到线上紧急问题时启用

  • 参数

    参数名 数据类型 说明
    interval float 任务限制时间,单个任务进入异步线程池排队+执行时间超过此时间还没有完成的,会以warning日志的形式输出
  • 返回值

    数据类型 说明
    bool 执行结果
  • 示例

import apolloCommon.commonNetgameApi as commonNetgameApi
commonNetgameApi.OpenAsyncTaskSlowCheck(0.01)

# StartDatabaseProfile

  • 描述

    开始记录数据库连接池请求信息统计,启动后调用StopDatabaseMysqlProfile(db)即可获取两个函数调用之间数据库连接池请求记录信息

  • 参数

    参数名 数据类型 说明
    db str 数据库连接池类型,mysql/redis/mongo
  • 返回值

    数据类型 说明
    bool 执行结果
  • 示例

import apolloCommon.commonNetgameApi as commonNetgameApi
commonNetgameApi.StartDatabaseProfile("mysql")
# 之后通过计时器或者其他触发方式调用StopDatabaseMysqlProfile
result = commonNetgameApi.StopDatabaseMysqlProfile("mysql")
for single in result:
        action = single["action"]
        if action == "executefunc":
                print "do {} func={} orderKey={} cost={}s ret={}".format(action, single["func"], single["orderKey"], single["costTp"], single["ret"])
        else:
                print "do {} orderKey={} cost={}s ret={}".format(action, single["orderKey"], single["costTp"], single["ret"])

# StartYappiProfile

  • 描述

    开始启动服务端脚本性能分析,启动后调用StopYappiProfile(path)即可在路径path生成函数性能火焰图

  • 返回值

    数据类型 说明
    bool 执行结果
  • 示例

import apolloCommon.commonNetgameApi as commonNetgameApi
commonNetgameApi.StartYappiProfile()
modfunc()# 处理对应的逻辑
# 之后通过计时器或者其他触发方式调用StopYappiProfile
commonNetgameApi.StopYappiProfile()

# StopDatabaseMysqlProfile

  • 描述

    停止记录数据库连接池请求信息并输出统计结果,与StartDatabaseProfile(db)配合使用,输出结果为字典,具体见示例

  • 参数

    参数名 数据类型 说明
    db str 数据库连接池类型,mysql/redis/mongo
  • 返回值

    数据类型 说明
    list 数据库连接池请求统计信息,具体见示例,假如没有调用过StartDatabaseProfile,则返回为None
  • 示例

import apolloCommon.commonNetgameApi as commonNetgameApi
commonNetgameApi.StartDatabaseProfile("mysql")
# 之后通过计时器或者其他触发方式调用StopDatabaseMysqlProfile
result = commonNetgameApi.StopDatabaseMysqlProfile("mysql")
for single in result:
        action = single["action"]
        if action == "executefunc":
                print "do {} func={} orderKey={} cost={}s".format(action, single["func"], single["orderKey"], single["costTp"])
        else:
                print "do {} orderKey={} cost={}s".format(action, single["orderKey"], single["costTp"])

# StopYappiProfile

  • 描述

    停止服务端脚本性能分析并生成火焰图,与StartYappiProfile()配合使用

  • 参数

    参数名 数据类型 说明
    fileName str 具体路径,相对于Apollo服务端启动目录的路径,默认为"flamegraph.svg",位于Apollo服务端启动目录下,自定义路径请确保文件后缀名为".svg"
  • 返回值

    数据类型 说明
    bool 执行结果
  • 示例

import apolloCommon.commonNetgameApi as commonNetgameApi
commonNetgameApi.StartYappiProfile()
modfunc()# 处理对应的逻辑
# 之后通过计时器或者其他触发方式调用StopYappiProfile
commonNetgameApi.StopYappiProfile()

# UnicodeConvert

  • 描述

    递归转换输入数据中的所有unicode格式的字符串为utf-8格式

  • 参数

    参数名 数据类型 说明
    input dict/list/tuple/str/unicode 需要转换的输入数据
  • 返回值

    数据类型 说明
    dict/list/tuple/str/unicode 和输入数据格式相同,其中的unicode格式的字符串会被转换为utf-8格式
  • 示例

import apolloCommon.commonNetgameApi as commonNetgameApi
unicodeStr = "我是unicode编码的".decode("utf-8")
input = {
        "a1": unicodeStr,
        "a2": [unicodeStr, unicodeStr],
        "a3": (unicodeStr, unicodeStr),
}
ret = commonNetgameApi.UnicodeConvert(input)

# 世界

# AddRepeatedTimer

  • 描述

    添加服务端触发的定时器,重复执行

  • 参数

    参数名 数据类型 说明
    delay float 延迟时间,单位秒
    func func 定时器触发函数
    *args *args 变长参数,可以不设置
    **kwargs **kwargs 字典变长参数,可以不设置
  • 返回值

    数据类型 说明
    timer 返回单次触发的定时器
  • 示例

def doRepeatPrint(info):
        print "doRepeatPrint", info
import apolloCommon.commonNetgameApi as commonNetgameApi
commonNetgameApi.AddRepeatedTimer(2.0, doRepeatPrint, "this is repeat timer")

# AddTimer

  • 描述

    添加服务端触发的定时器,非重复

  • 参数

    参数名 数据类型 说明
    delay float 延迟时间,单位秒
    func func 定时器触发函数
    *args *args 变长参数,可以不设置
    **kwargs **kwargs 字典变长参数,可以不设置
  • 返回值

    数据类型 说明
    timer 返回单次触发的定时器
  • 示例

def doOncePrint(info):
        print "doOncePrint", info
import apolloCommon.commonNetgameApi as commonNetgameApi
commonNetgameApi.AddTimer(5.0, doOncePrint, "this is once timer")

# CancelTimer

  • 描述

    取消定时器

  • 参数

    参数名 数据类型 说明
    timer timer对象 AddTimer和AddRepeatedTimer时返回的定时器对象
  • 返回值

  • 示例

import apolloCommon.commonNetgameApi as commonNetgameApi
commonNetgameApi.CancelTimer(timer)

# 玩家

# GetOnlineKey

  • 描述

    输入玩家uid,返回此玩家保存在redis中的在线标识的key

  • 参数

    参数名 数据类型 说明
    uid int/long 玩家的uid
  • 返回值

    数据类型 说明
    str 此玩家保存在redis中的在线标识的key;它是个hash表,包含两个hash key:serverid,proxyid,假如无法获取到或者只获取到proxyid获取不到serverid,说明此玩家当前不在线
  • 示例

import apolloCommon.commonNetgameApi as commonNetgameApi
onlineKey = commonNetgameApi.GetOnlineKey(123)

# GetOnlineServerInfoOfMultiPlayers

  • 描述

    获取多个玩家在线信息

  • 参数

    参数名 数据类型 说明
    uids list(int/long) 玩家的netease uid列表,列表不能超过100,若超过100,本api会抛出Exception
    callback function 回调函数,该函数会被异步执行。函数只需要一个参数,是list(dict)类型。每个dict包含的键以及含义说明:"uid":玩家的netease uid; "serverId":玩家所在lobby或game的服务器id, 若玩家不在线则为None;"proxyId":客户端连接的proxy服务器id, 若玩家不在线则为None; "protocolVersion":玩家客户端协议版本号, 若玩家不在线则为None
  • 返回值

  • 示例

def GetPlayersOnlineCb(args):
        #若参数是:{["uid":123, "isPeUser":True, "serverId" :2000000, "proxyId" :1000000, "protocolVersion":422},{"uid":234, "isPeUser":False, "serverId" :None, "proxyId" :None, "protocolVersion":None}]
        #参数含义:第一个玩家uid是123,玩家最后一次登录游戏是从手机端登录的,玩家是在线的,所在lobby或game的服务器id是2000000,玩家连接的proxy服务器id是1000000,玩家客户端协议版本号是422;
        # 第二个玩家玩家uid是234,玩家最后一次登录游戏是从PC端登录的,玩家是离线的
        print 'GetOnlineServerCb', args
import apolloCommon.commonNetgameApi as commonNetgameApi
commonNetgameApi.GetOnlineServerInfoOfMultiPlayers([123, 234], GetPlayersOnlineCb)

# GetOnlineServerInfoOfPlayer

  • 描述

    获取玩家在线信息

  • 参数

    参数名 数据类型 说明
    uid int/long 玩家的netease uid,玩家的唯一标识
    callback function 回调函数,该函数会被异步执行。函数只需要一个参数,是dict类型。dict包含的键以及含义说明:"uid":玩家的netease uid; "serverId":玩家所在lobby或game的服务器id, 若玩家不在线则为None;"proxyId":客户端连接的proxy服务器id, 若玩家不在线则为None; "protocolVersion":玩家客户端协议版本号, 若玩家不在线则为None
  • 返回值

  • 示例

def GetOnlineCb(args):
        #若参数是:{"uid":123, "isPeUser":True, "serverId" :2000000, "proxyId" :1000000, "protocolVersion":422}
        #参数含义:玩家uid是123,玩家最后一次登录游戏是从手机端登录的,玩家是在线的,所在lobby或game的服务器id是2000000,玩家连接的proxy服务器id是1000000,玩家客户端协议版本号是422
        #若参数是:{"uid":123, "isPeUser":False, "serverId" :None, "proxyId" :None, "protocolVersion":None}
        #参数含义:玩家uid是123,玩家最后一次登录游戏是从PC端登录的,玩家是离线的
        #参数含义:isPeUser的值是None的话,说明此玩家从来没有登录过本游戏
        print 'GetOnlineServerCb', args
import apolloCommon.commonNetgameApi as commonNetgameApi
commonNetgameApi.GetOnlineServerInfoOfPlayer(123, GetOnlineCb)

# GetWeekOnlineKey

  • 描述

    输入玩家uid,返回此玩家保存在redis中的本周的在线时间

  • 参数

    参数名 数据类型 说明
    uid int/long 玩家的uid
  • 返回值

    数据类型 说明
    str 此玩家保存在redis中的本周在线时间的key;它是个string,转化为int后就是此玩家本周在线时间的秒数

# ToPcUid

  • 描述

    将玩家的uid转换为pc平台的uid

  • 参数

    参数名 数据类型 说明
    uid int/long 玩家的uid
  • 返回值

    数据类型 说明
    int/long pc平台的玩家uid

# ToPeUid

  • 描述

    将玩家的uid转换为pe平台的uid

  • 参数

    参数名 数据类型 说明
    uid int/long 玩家的uid
  • 返回值

    数据类型 说明
    int/long pe平台的玩家uid