介绍
ZXAPI
是可以为用户提供消息分发、数据存储、任务队列、地球坐标和排行榜计算等功能在线接口(接口支持 HTTP 或 WebSocket
协议)。这些接口底层功能由 C++ 开发,通过 Google V8 引擎解析用户上传的 JavaScript
脚本进行调用。脚本上传后1秒内生效,可以不断线热更新。
接口特点:
-
单进程支持10万并发(能够长时间保持的连接数)、处理能力可达2万次/秒(小于1KB的键值存取测试结果;与工作线程数量关系不大)。
-
提供高性能持久型键值存储功能,可通过集群无限扩展存储空间。
-
提供不限数量的定时任务队列功能,不超负荷(3万任务/秒)的情况下平均误差时间不超过 20 毫秒。
-
提供地球坐标和排行榜计算功能,可应于社交游戏的查找附近好友、显示实时积分榜单等场景。
应用示范
景好便利贴 https://zxapi.com/bianlitiel (一款Windows效率工具软件,它的网络同步功能后端是用ZXAPI实现的。)
炸弹小子 https://img.zxapi.com/zd/index.html (前端修改自 Matchvs游戏云案例 ,主要使用了ZXAPI的消息分发和任务队列功能重写了一个简化版的后端)
网页版进销存 https://img.zxapi.com/web/index.html (前端修改自“好货记进销存”,这里是使用了ZXAPI的键值存储功能重写了一个简化版的后端)
在线象棋 https://zxapi.com/xq/index.html可多人观战的象棋小游戏,后端用ZXAPI实现。
功能示范
下面以排行榜功能举例示范,排行榜功能主要用于实时排行计算。设置数值能立即获取到该数值排行(10亿级数据能在1毫秒内完成)。
- 前提说明
- 系统支持2^32个独立的排行榜同,用榜单id区分,榜单id大于等于零为临时榜单,进程退出后丢失,榜单id小于零为持久榜单。
- 每个榜单内可插入2^32个项目id,每个项目id对应一个数值和一个时间,时间在数值可自动设置为当前系统时间(精度+-10毫秒);
- 排行就是项目数值大小的排列次序,数值最大的排行值为 1 ;
- 对于相同数值,会得到相同排行值,但会占用排行名额。比如有两个相同的数值并列第一,那么排行值2会缺失,下一个数值的排行值是3;
- 项目id 和 数值 都为32位正整数,超过此范围会按位截断;
- 这些函数的返回值都为一个数组: [错误码,结果,...],无错误时,错误码为 undefined 。
zx.排行设置(榜单id,项id,数值,[时间]);
新增或更新某项数值,即使数值不变也会刷新时间,如果不带时间参数则使用当前系统时间。
返回值 = [错误码,原值,原时间];
zx.排行删除(榜单id,[项id]);
删除榜单中的某项,如果不带项id参数则删除整个榜单。
返回值 = [错误码];如果id项不存在或删除数量为零,错误码为1
zx.排行读取(榜单id,项id,[读取选项]);
读取某项的数值或获取更多信息。
读取选项 = 0 或不设置: 返回值 = [错误码,数值];
读取选项 = 1: 返回值 = [错误码,数值,排名,null];
读取选项 = 2: 返回值 = [错误码,数值,null,时间];
读取选项 > 2: 返回值 = [错误码,数值,排名,时间];
zx.排行设取(榜单id,项id,数值,[时间]);
新增或更新某项数值,并获取最新排行。
返回值 = [错误码,原值,原时间,现在的排行];
zx.排行计算(榜单id,数值);
计算一个数值(应当)所处的排行,此操作不改变或影响排行榜.
返回值 = [错误码,排行];
zx.排行项列取(榜单id,起始项id,数量);
按项目id的顺序列出榜单内的项目
返回[错误码,[id,值],[id,值]...];结果包含起始项,数量不大于10000;
如果需要反方向列取,数量可以设置为负数,结果包括起始项。
zx.排行值列取(榜单id,起始值,数量);
根据数值大小列取榜单项目,从起始值开始由小到大列取。
- 返回值[错误码,[id,值,时间],[id,值,时间]...],结果包含起始值,数量不大于10000。
- 如果需要反方向列取,数量可以设置为负数,结果也包含起始值对应项。
- 注意:对于值相同的项目,他们是按id排序。(需要按时间排序可以自行处理,但这里面有一个小坑:因为数量限制,有些数值相同的项目可能没有完整列出,也就无法有效排序,设置足够大的数量甚至多次查询可以解决这个问题。)
- 取TOP100示例:zx.排行值列取(榜单id,0xffffffff,-100);
排行榜功能接口在线测试
脚本下载或上传路径("/test.js" 路径可修改,不存在的目录会自动创建)
脚本示例(修改上传后立即生效);
连接或发送地址(可以是 ws:// 协议,也可以是
http:// 协议)
发送内容
状态或返回内容