一种支持私有化部署的系统及方法与流程

专利查询2023-10-18  118



1.本发明涉及互联网技术领域,具体来说,涉及一种支持私有化部署的系统及方法。


背景技术:

2.随着互联网的高速发展,互联网应用的功能逐渐丰富,界面复杂度也随之增加,传统的网站架构采用单体应用的架构,前后端代码位于一个代码库内,使用mvc模式,将后端代码嵌入前端模板中,每次访问时由后端根据模板生成前端页面。这种模式下,前端功能较为单一,可交互性不强,而开发者也没有明确区分前后端的概念,当系统规模逐渐增长后,开发和维护成本将迅速增长;为此,业界提出了前后端分离的开发模式,将前端独立,使用ajax技术动态地从后端请求数据,在约定前后端接口的情况下,前端开发人员可以独立迭代前端子系统,而不必关心后端的实现,从而实现解耦。
3.通过使用微服务,开发者可以快速完成构建部署,维护成本也大为降低,扩放性较单体程序而言也有了显著的提高,但是从本质上来说,微服务依然没有摆脱“客户机—服务器”模型,在这种模型下用户需要自己搭建运行时环境,然后将服务部署在预先分配好的云计算资源上,无服务器计算(serverless computing)是云计算的一个新范式。
4.目前,互联网的服务端现状仍然存在以下技术缺陷:1、后端服务开发与运维困难,工程师难招;2、对数据实时传输有需求,但是研发成本和难度很高;3、传统开发虽然前后端分离,但开发配合要求高,需要联调代码,总是出现前端等后端或后端等前端的问题;4、虽然互联网出现了nodejs目标是汇整前端和后端,让其都能用javascript语法写代码,但其需要npm开发环境,门槛依然高,还需要编译后端代码,不够轻量化。
5.针对相关技术中的问题,目前尚未提出有效的解决方案。


技术实现要素:

6.针对相关技术中的问题,本发明提出一种支持私有化部署的系统及方法,以克服现有相关技术所存在的上述技术问题。
7.为此,本发明采用的具体技术方案如下:根据本发明的一个方面,提供了一种支持私有化部署的系统,包括:服务端、前端工具包及前端工具包插件;所述服务端,用于接收用户通过应用程序接口发送的数据包,解析识别json格式的对象,进行序列化及反序列化,并根据用户的path路径,使用深度递归对json格式的对象进行数据结构修改及调整,处理数据节点后判断path路径的存储类型,并将数据存储到服务端的内存,从内存中读取当前用户的session中监听path路径的数据,并对用户进行网络协议的广播行为;所述前端工具包,用于提供应用程序接口,将javascript利用网络协议连接到服
务端,并使用应用程序接口通过网络协议发送数据包到服务端,调用浏览器的内存直接执行callback,实现实时数据的回调,同时对于普通的查询,使用once的应用程序接口进行操作指令的执行,在服务端识别后从浏览器中获取该节点的值,并做单独的session广播;所述前端工具包插件,用于对原有的前端工具包进行封装,支持在node.js的npm环境中执行客户端工具包,并发送指令到服务端进行数据的持久化操作、获取、监听动作。
8.进一步的,所述提供应用程序接口,将javascript利用网络协议连接到服务端包括以下步骤:通过调通一行应用程序接口命令,快速实现私有部署的服务端的连接;程序通过服务端的js-sdk,自动调用节点路径控制器;节点路径控制器对此次请求以及数据进行识别和解析,生成序列化字符串,并利用sdk解析序列化字符串;解析序列化字符串后生成对应的序列化json字符串;通过浏览器h5规范标准接口将网络协议的发送到服务端。
9.进一步的,所述利用网络协议包括:操作指令、操作路径、操作数据及回调函数。
10.进一步的,所述接收用户通过应用程序接口发送的数据包,解析识别json格式的对象,进行序列化及反序列化,并根据用户的path路径,使用深度递归对json格式的对象进行数据结构修改及调整包括以下步骤:通过服务端与浏览器的握手实现服务端与浏览器客户端的长连接,当浏览器的客户端通过无服务系统的js-sdk发送到服务端时,服务端会通过消息处理器做首要数据接收入口处理;在消息处理器中会优先获取网络协议长连接传递过来的消息字符串,并进行反序列化操作,获得json对象;从session会话中获取客户端的sessionid及websocket_session,并识别用户会话id及每个会话请求监听的多个客户端的子会话id;系统识别客户端通信过来的行为动作,并根据不同的动作做对应的操作。
11.进一步的,所述操作包括查询、监听、更新、新增及删除。
12.进一步的,所述将数据存储到服务端的内存包括内存存储、redis缓存存储、mongodb存储三种存储方式。
13.进一步的,所述从内存中读取当前用户的session中监听path路径的数据,并对用户进行网络协议的广播行为还包括以下步骤:服务端判断用户的请求行为,并对数据进行持久化存储。
14.进一步的,所述服务端判断用户的请求行为,并对数据进行持久化存储包括以下步骤:用户请求更新数据节点数据;服务端在收到命令并处理完毕数据到数据库中持久化后,自行构建返回消息体。
15.进一步的,所述调用浏览器的内存直接执行callback,实现实时数据的回调还包括以下步骤:服务端通过核心包的核心消息推送方法进行消息推送,且推送中包含准确的用户会话id及封装完毕的响应;其中,所述封装完毕的响应包括callbackid、code及value。
16.根据本发明的另一个方面,提供了一种支持私有化部署的方法,该方法包括以下步骤:s1、通过服务端提供应用程序接口,并将javascript利用网络协议连接到服务端;s2、利用网络协议,用户通过应用程序接口发送数据包到服务端;s3、服务端接收到用户通过应用程序接口发送来的数据包,解析识别json格式的对象,进行序列化及反序列化,并根据用户的path路径,使用深度递归对json格式的对象进行数据结构修改与调整;s4、利用服务端处理数据的节点,并判断path路径的存储类型,将数据存储到服务端的内存;s5、服务端从内存中读取当前用户的session中监听path路径的数据,对用户进行网络协议的广播行为,并调用浏览器的内存直接执行callback,实现实时数据的回调;s6、对于普通的查询,使用once的应用程序接口进行操作指令的执行,服务端识别后,从浏览器中获取该节点的值,并做单独的session广播。
17.本发明的有益效果为:1、本发明可以让互联网研发人员,只使用一门基本语言(javascript),就可以快速开发出一款大型互联网软件项目程序,开发人员不需要写后端程序代码,就可以达到对业务数据实时存储的开发能力。
18.2、本发明解决系统的技术门槛问题,建立极低技术门槛,具备完整的一套前端javascript语言的api,可以让研发人员在各个业务开发需要的场景下使用monkeykey系统完成业务逻辑的编写,开发人员不需要关心后端数据库的存储、读取、性能等多方面技术问题(开发无门槛),并且本发明的技术适用于互联网所有web应用(受用无门槛)。
19.3、本发明可以让研发技术人员使用本系统后,研发人力成本减少30%,开发周期缩短50%,为研发公司创造研发成本质的飞跃;本发明可以私有化部署,可以让授权使用本发明的研发公司灵活使用自己的服务器,不强行捆绑用户使用saas模式付费使用本技术系统。
附图说明
20.为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
21.图1是根据本发明实施例的一种支持私有化部署的系统的结构示意图;图2是根据本发明实施例的一种支持私有化部署的系统的原理示意图图3是根据本发明实施例的一种支持私有化部署的方法中使用monkeykey开发高性能的实时多人在线游戏图;图4是根据本发明实施例的一种支持私有化部署的方法的流程图。
具体实施方式
22.为进一步说明各实施例,本发明提供有附图,这些附图为本发明揭露内容的一部
分,其主要用以说明实施例,并可配合说明书的相关描述来解释实施例的运作原理,配合参考这些内容,本领域普通技术人员应能理解其他可能的实施方式以及本发明的优点,图中的组件并未按比例绘制,而类似的组件符号通常用来表示类似的组件。
23.根据本发明的实施例,提供了一种支持私有化部署的系统及方法。
24.现结合附图和具体实施方式对本发明进一步说明,如图1及图2所示,根据本发明实施例的支持私有化部署的系统,包括:服务端、前端工具包及前端工具包插件;所述服务端,用于接收用户通过应用程序接口发送的数据包,解析识别json格式的对象,进行序列化及反序列化,并根据用户的path路径,使用深度递归对json格式的对象进行数据结构修改及调整,处理数据节点后判断path路径的存储类型,并将数据存储到服务端的内存,从内存中读取当前用户的session中监听path路径的数据,并对用户进行网络协议的广播行为;所述前端工具包,用于提供应用程序接口,将javascript(一门基本语言)利用网络协议(websocket)连接到服务端,并使用应用程序接口通过网络协议发送数据包到服务端,调用浏览器的内存直接执行callback,实现实时数据的回调,同时对于普通的查询,使用once的应用程序接口进行操作指令的执行,在服务端识别后从浏览器中获取该节点的值,并做单独的session广播;所述前端工具包插件,用于对原有的前端工具包进行封装,支持在node.js的npm环境中执行客户端工具包,并发送指令到服务端进行数据的持久化操作、获取、监听动作。
25.为了方便理解本发明的上述技术方案,以下就本发明中的上述系统组件的功能及原理进行详细说明。
26.monkeykey-server(服务端):monkeykey的服务端,接收来自客户端的指令,进行数据库的持久化操作与客户端广播的能力。用来和使用sdk的客户端进行通信的服务端,支持与客户端建立websocket长连接握手与通信,支持接收sdk请求过来的操作路径、请求数据、操作指令对指定的mongodb数据库节点进行增、删、改、查、监听操作,通过websocket实时给全球来自客户端的监听者广播对应路径下的最新数据。此server支持私有化部署,客户可以将此server部署到自己的服务器中,并且调整客户端sdk的服务端地址配置,就可以实现前端通过sdk实时连接到私有化部署的monkeykey server中。开发人员只需要部署此服务端,就可以通过客户端sdk进行服务端接口定义和通信,无需写服务端代码,因此叫做无服务技术系统;javascript-sdk(前端工具包):monkeykey的客户端sdk,专门提供给前端开发人员使用的javascript语言的sdk,提供了丰富的api指令javascript函数,让开发人员可以只写javascript就能实现目标数据库的创建与数据维护操作,此sdk会自动连接到monkeykey server,由server进行指令解析和数据库持久化操作;nodejs-sdk(前端工具包插件):monkeykey的node.js端的sdk,和javascript sdk功能一样,对原有的javascript sdk进行了封装,支持了在node.js的npm环境中执行客户端sdk,从而实现发送指令到monkeykey server进行数据的持久化操作、获取、监听等动作。
27.在一个实施例中,将javascript利用网络协议连接到服务端包括以下步骤:通过调通一行应用程序接口命令,快速实现私有部署的服务端的连接,代码如下:var ref = monkeykey.initializeapp(config,"mkk_app").sync().ref().root
().ref("codeworld/test/times"); // 指定存储路径ref.set(value); // 存入数据到指定路径中;程序通过服务端的js-sdk,自动调用节点路径控制器,代码如下:function nodepathcontroller(nodepath, sessionid, type, jsonstr);节点路径控制器对此次请求以及数据进行识别和解析,生成序列化字符串,并利用sdk解析序列化字符串;在具体应用时,为了精确的生成正确数据类型的序列化字符串,sdk优先会分析传入进来的jsonstr是字符串类型还是数值类型,进行了如下的分析if (typeof jsonstr == 'string') {
ꢀꢀꢀꢀ
try {
ꢀꢀꢀꢀꢀꢀꢀꢀꢀ
json.parse(jsonstr);
ꢀꢀꢀꢀ
} catch (e) {
ꢀꢀꢀꢀꢀꢀꢀꢀꢀ
isstr = true;
ꢀꢀꢀꢀ
};}if (typeof (jsonstr*1) == "number" &&
ꢀꢀ
(jsonstr*1) 《 0.000001 && ((jsonstr*1) != 0)) {
ꢀꢀꢀꢀ
isstr = true;}解析序列化字符串后生成对应的序列化json字符串,代码如下:var _msg = "{\"code\":\"mkk_" + _type + "\",\"nodepath\":\"" + _nodepath + "\",\"sessionid\":\"" + _sessionid + "\","
ꢀꢀꢀꢀ
+ eval('(jsonstr != null ' + decodeuricomponent("%3f") + ' \"\\"data\\":\" + (isstr ' + decodeuricomponent("%3f") + ' \"\\"\" + jsonstr + \"\\"\" : jsonstr) : \"\\"data\\": null\")') + ",\"db\":\"" + window.config.db
ꢀꢀꢀꢀ
+ "\",\"collection\":\"" + window.config.collection + "\"}";通过浏览器h5规范标准接口将网络协议的发送到服务端,代码如下:if(sock.readystate === 1){
ꢀꢀꢀꢀ
sock.send(_msg);} else {settimeout(function(){
ꢀꢀꢀꢀꢀꢀꢀꢀꢀ
nodepathcontroller(_nodepath, _sessionid, _type, _jsonstr);
ꢀꢀꢀꢀ
}, 200);}。
28.具体的,所述利用网络协议包括:操作指令、操作路径(database、collection、path)、操作数据(data)及回调函数(callback function)。
29.在一个实施例中,所述接收用户通过应用程序接口发送的数据包,解析识别json格式的对象,进行序列化及反序列化,并根据用户的path路径,使用深度递归对json格式的
对象进行数据结构修改及调整包括以下步骤:通过服务端与浏览器的握手实现服务端与浏览器客户端的长连接,当浏览器的客户端通过无服务系统的js-sdk发送到服务端时,服务端会通过消息处理器做首要数据接收入口处理,服务端核心包名为:com.monkeykey.handler.websockethander,核心方法体描述如下:public void handlemessage(websocketsession session, websocketmessage《》 websocketmessage) throws exception;在消息处理器中会优先获取网络协议长连接传递过来的消息字符串,并进行反序列化操作,获得json对象(jsonobject);synchronized (this) {
ꢀꢀꢀꢀ
string response = "";
ꢀꢀꢀꢀ
string msg = websocketmessage.getpayload() + "";
ꢀꢀꢀꢀ
msg = msg.replaceall("\\n", "\\${mkk_next_line}");
ꢀꢀꢀꢀ
jsonobject json = jsonobject.parseobject(msg);....};从session会话中获取客户端的sessionid及websocket_session,并识别用户会话id(username)及每个会话请求监听的多个客户端的子会话id(sessionid);jsonobject json = jsonobject.parseobject(msg);string sessionid = json.get("sessionid") + "";// 这个username只是jsessionidusername = (string) session.getattributes().get("websocket_sessionid");string code = json.get("code") + "";// 这个sessionid是jsessionid+uuid 或者 jsessionid+timestampstring nodepath = json.get("nodepath") + "";string fullpath = json.get("nodepath") + "";系统识别客户端通信过来的行为动作,并根据不同的动作做对应的操作,代码如下:switch (code) {
ꢀꢀꢀꢀ
case "mkk_on":
ꢀꢀꢀꢀꢀꢀꢀꢀ
......
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
// 存入缓存中
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
nodepathandusers.put(fullpath.replace(filter, ""), userlist);
ꢀꢀꢀꢀꢀꢀꢀꢀ
......
ꢀꢀꢀꢀ
case "mkk_off":
ꢀꢀꢀꢀꢀꢀꢀꢀ
......
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
// 存入缓存中
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
nodepathandusers.put(fullpath, userlist);
ꢀꢀꢀꢀꢀꢀꢀꢀ
......
ꢀꢀꢀꢀꢀꢀꢀꢀꢀ
break;
ꢀꢀꢀꢀ
case "mkk_once":
ꢀꢀꢀꢀꢀꢀꢀꢀ
......
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
object res = smartutil.baseonce(nodepath, db, collection);
ꢀꢀꢀꢀꢀꢀꢀꢀ
......
ꢀꢀꢀꢀꢀꢀꢀꢀꢀ
break;
ꢀꢀꢀꢀ
case "mkk_push":
ꢀꢀꢀꢀꢀꢀꢀꢀ
......
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
object res = smartutil.basepush(nodepath, db, collection, obj);
ꢀꢀꢀꢀꢀꢀꢀꢀ
......
ꢀꢀꢀꢀꢀꢀꢀꢀꢀ
break;
ꢀꢀꢀꢀ
case "mkk_set":
ꢀꢀꢀꢀꢀꢀꢀꢀ
......
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
// 直接推送, 不会存入数据库
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
if (fullpath.equals("codeworld/test/xy")) {
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
// 实时通信广播
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
smartutil.websockettousers(fullpath, obj, "", db, collection);
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
......
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
} else {
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
object res = smartutil.baseset(nodepath, db, collection, obj);
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
......
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
}
ꢀꢀꢀꢀꢀꢀꢀꢀ
......
ꢀꢀꢀꢀꢀꢀꢀꢀꢀ
break;
ꢀꢀꢀꢀ
case "mkk_update":
ꢀꢀꢀꢀꢀꢀꢀꢀ
......
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
object res = smartutil.baseupdate(nodepath, db, collection, obj);
ꢀꢀꢀꢀꢀꢀꢀꢀ
......
ꢀꢀꢀꢀꢀꢀꢀꢀꢀ
break;
ꢀꢀꢀꢀ
default:
ꢀꢀꢀꢀꢀꢀꢀꢀꢀ
// 其他指令暂不开放
ꢀꢀꢀꢀꢀꢀꢀꢀꢀ
if (!"".equals(response)) {
ꢀꢀꢀꢀꢀꢀꢀ
response = response} else {
ꢀꢀꢀꢀꢀꢀꢀ
response = "{\"code\": \"error\", \"value\": \"this code: " + code + " is not defined.\"}";}
ꢀꢀꢀꢀꢀꢀꢀꢀꢀ
break;}。
30.具体的,所述操作包括查询、监听、更新、新增及删除。所述将数据存储到服务端的内存包括内存存储、redis缓存存储、mongodb存储三种存储方式,且核心包位于服务端包;在具体应用时,// 如果是redis模式if (rediscluster.isredismode(db + "/" + col + "-》" + path.replaceall("\\.", "/"))) {
ꢀꢀꢀꢀ
// 存入redis
ꢀꢀꢀꢀ
saveredis(path.replaceall("\\.", "/"), db, col, json);} else {
ꢀꢀꢀꢀ
// 存入mongodb
ꢀꢀꢀ
......
ꢀꢀꢀꢀ
collection.insertone(adddoc);
ꢀꢀꢀ
......
ꢀꢀꢀꢀ
collection.updateone(filterbson, doc);
ꢀꢀꢀ
......}。
31.在一个实施例中,所述从内存中读取当前用户的session中监听path路径的数据,并对用户进行网络协议的广播行为还包括以下步骤:服务端判断用户的请求行为,并对数据进行持久化存储,具体包括以下步骤:服务端判断完毕用户的请求行为后,会对数据进行持久化存储,比如用户请求set(更新数据节点数据),服务端在收到命令并处理完毕数据到数据库中持久化后,就会自行构建response(返回消息体),代码如下:case "mkk_set":
ꢀꢀꢀ
......
ꢀꢀꢀꢀꢀꢀꢀꢀꢀ
object res = smartutil.baseset(nodepath, db, collection, obj);
ꢀꢀꢀꢀꢀꢀꢀꢀꢀ
if (res instanceof string && !mongoutil.isjsonstr(res)) {
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
res = "\"" + res + "\"";
ꢀꢀꢀꢀꢀꢀꢀꢀꢀ
}
ꢀꢀꢀꢀꢀꢀꢀꢀꢀ
response = "{\"callbackid\":\"" + sessionid + "\",\"code\": \"callback\", \"value\": " + res +
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
", \"nodepath\": \"" + fullpath + "\"}";
ꢀꢀꢀ
......
ꢀꢀꢀꢀ
break。
32.在一个实施例中,所述调用浏览器的内存直接执行callback,实现实时数据的回调还包括以下步骤:服务端通过核心包的核心消息推送方法进行消息推送,推送中包含准确的用户会话id(身份),以及封装完毕的response,其中response中包含着callbackid(即sessionid客户端唯一回调id,用于告知客户端接收此消息后该回调哪个客户端回调函数)、code(服务端告知客户端此次消息通知需要客户端执行的动作,为callback,即回调函数触发)、value(来自客户端的请求后服务端返回的值,最新节点的值,等同于一次节点数据查询的返回),调用函数如下:sendmessagetouser(username, new textmessage(response));所述对于普通的查询,使用once的应用程序接口进行操作指令的执行,在服务端识别后从浏览器中获取该节点的值,并做单独的session广播的代码如下:case "mkk_once":
ꢀꢀꢀꢀ
if (json.get("nodepath") != null) {
ꢀꢀꢀꢀꢀꢀꢀꢀꢀ
object res = smartutil.baseonce(nodepath, db, collection);
ꢀꢀꢀꢀꢀꢀꢀꢀ
......
ꢀꢀꢀꢀꢀꢀꢀꢀꢀ
response = "{\"callbackid\":\"" + sessionid + "\",\"code\": \"callback\", \"value\": " + res +
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
", \"nodepath\": \"" + fullpath + "\"}";
ꢀꢀꢀꢀ
}
ꢀꢀꢀꢀ
else {
ꢀꢀꢀꢀꢀꢀꢀꢀꢀ
response = "{\"code\": \"error\", \"value\": \"nodepath is null.\"}";
ꢀꢀꢀꢀ
}
ꢀꢀꢀꢀ
break;......sendmessagetouser(username, new textmessage(response))。
33.在具体应用时,根据本发明的另一具体实施例,该一种支持私有化部署的系统还包括产品侧,具体使用流程如下:该无服务系统无前端形态,开发人员直接通过在html的头部引入,服务代码如下:《script src="monkeykey-1.0.0.js"》《/script》;《head》
ꢀꢀꢀꢀ
《meta charset="utf-8"》
ꢀꢀꢀꢀ
《meta http-equiv="x-ua-compatible"》
ꢀꢀꢀꢀ
《link rel="shortcut icon" href="/favicon.ico"》
ꢀꢀꢀꢀ
《link rel="bookmark" href="/favicon.ico" type="image/x-icon"》
ꢀꢀꢀꢀ
《title》monkeykey.io《/title》
ꢀꢀꢀꢀ
《link rel="stylesheet" href="css/style.css"》
ꢀꢀꢀꢀ
《script src="monkeykey-1.0.0.js"》《/script》《/head》。
34.可以直接使用new monkeykey获得monkeykey主对象,指定了希望操作的数据节点路径后,可以使用monkeykey任意的api对系统的数据进行增、删、改、查操作,代码如下:// 指定monkey key服务端(开发人员可以私有部署后指定自己的服务器)window.config.syncurl = 'https://' + window.monkey.server;// 指定monkey key要存储的数据库window.config.db = 'monkey';// 指定monkey key要存储的数据库里的容器window.config.collection = 'team';// 初始化monkey key, 并给当前应用命名mkk_appwindow.app = monkeykey.initializeapp(config, "mkk_app");// 指定即将操作的节点路径:codeworld/test/ timeswindow.ref = window.app.sync().ref().root().ref("codeworld/test/times");function doit(){
ꢀꢀꢀꢀ
// 节点实时监听(等同于长连接的实时查询,该节点一旦有变动,就会自动执行内部回调函数)
ꢀꢀꢀꢀ
window.ref.on(function(d){
ꢀꢀꢀꢀꢀꢀꢀꢀꢀ
// 获取实时广播过来的该节点最新的值
ꢀꢀꢀꢀꢀꢀꢀꢀꢀ
if (d.val() != null) {
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
// 简单业务逻辑判断(判断是自动刷新还是当前页面手动触发的)
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
if (!window.hasrecord) {
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
// 节点的设置(即节点数据值的更新,支持所有数据类型
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
// 该行js代码执行后,全球当前页面的用户全部会自动刷新)
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
window.hasrecord = true;
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
ref.set(d.val() + 1);
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
};
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
// 1秒内从0到当前的数
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
// 全球用户共享实时数据刷新效果
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
var c = 0;
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
var code = setinterval(function(){
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
c++;
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
if (c 》 100) {
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
clearinterval(code);
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
} else {
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
// d.val() 当前节点最新的值
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
$("#times").html(math.ceil(d.val() * (c/
100)));
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
};
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
}, 10);
ꢀꢀꢀꢀꢀꢀꢀꢀꢀ
};
ꢀꢀꢀꢀ
});};doit();开发者指定某一数据节点路径后可以通过使用api中的on来做数据的监听,开发者可以用3行代码完成一个实时聊天系统,可以轻松实时获得全球数据同步刷新的数值;开发者可以在任何支持h5的平台(微信小程序、公众号、安卓、ios)使用monkeykey快速达到开发高性能的实时多人在线游戏(如图3所示)、大型交互系统等。
35.为了更好地理解本发明的上述技术方案,以下就本发明的一个具体实施例进行说明:假设:一个公司有3个研发人员(2个前端,1个后端),一个项目需要3人开发2天时间,成本为6人天;使用了本发明的公司:只需要2个研发人员(2个前端。人力成本-30%),该项目1天(开发周期-50%)可完成开发,成本为2人天;效果:该公司此项目的研发成本减少66%。
36.根据本发明的另一个实施例中,如图4所示,提供了一种支持私有化部署的方法,该方法包括以下步骤:s1、通过服务端提供应用程序接口,并将javascript利用网络协议连接到服务端;s2、利用网络协议,用户通过应用程序接口发送数据包到服务端;s3、服务端接收到用户通过应用程序接口发送来的数据包,解析识别json格式的对象,进行序列化及反序列化,并根据用户的path路径,使用深度递归对json格式的对象进行数据结构修改与调整;s4、利用服务端处理数据的节点,并判断path路径的存储类型,将数据存储到服务端的内存;s5、服务端从内存中读取当前用户的session中监听path路径的数据,对用户进行网络协议的广播行为,并调用浏览器的内存直接执行callback,实现实时数据的回调;s6、对于普通的查询,使用once的应用程序接口进行操作指令的执行,服务端识别后,从浏览器中获取该节点的值,并做单独的session广播。
37.综上所述,借助于本发明的上述技术方案,借助于本发明的上述技术方案,无需编写后端代码,无需租用服务器,更无需运维就可以开发移动应用、游戏或智能硬件,快速实现设备间的数据实时推送并且跨多个平台。并且monkeykey支持私有化部署monkeykey并非只能通过公共互联网服务调用,本发明包括monkeykey客户端sdk和monkeykey server服务端,有服务端因此支持私有部署到使用者的本地服务器上,彻底解决服务端受限制、运维受限的问题,使用monkeykey可以自行决定部署在云端还是本地实体服务器中。目前,h5已经满足整个互联网的跨平台问题,monkeykey提供了javascript-sdk后即可拥有跨平台使用的特性,另外,monkeykey还提供了nodejs-sdk,nodejs本身就最大化的解决了跨平台问题,
因此更大的提升了monkeykey的跨平台能力;因为monkeykey解决了数据接口服务的问题,让前端开发人员可以轻松使用monkeykey的js-sdk实现数据接口服务自定义和调用,配合monkeykey nodejs-sdk的提供,最大化靠向大前端的思想理念。对于低门槛,因为monkeykey的js-sdk是使用原生javascript开发的,无技术门槛要求,因此满足大前端低门槛的特性,sdk功能强大,支持websocket与http long polling。已有javascript,nodejs 多套sdk。支持离线使用功能,支持离线重连机制,提供云端计算表达式,兼容性强大,可快速迁移你的应用,数据开放,可快速导入导出数据,提供一套完整的用户机制,支持第三方登录,可自定义终端用户授权方式,对物联网应用具有特别的支持,高效稳定省电,几乎完全隔离的生产环境;本发明可以让互联网研发人员,只使用一门基本语言(javascript),就可以快速开发出一款大型互联网软件项目程序,开发人员不需要写后端程序代码,就可以达到对业务数据实时存储的开发能力;本发明解决系统的技术门槛问题,建立极低技术门槛,具备完整的一套前端javascript语言的api,可以让研发人员在各个业务开发需要的场景下使用monkeykey系统完成业务逻辑的编写,开发人员不需要关心后端数据库的存储、读取、性能等多方面技术问题(开发无门槛),并且本发明的技术适用于互联网所有web应用(受用无门槛);本发明可以让研发技术人员使用本系统后,研发人力成本减少30%,开发周期缩短50%,为研发公司创造研发成本质的飞跃;本发明可以私有化部署,可以让授权使用本发明的研发公司灵活使用自己的服务器,不强行捆绑用户使用saas模式付费使用本技术系统。
38.以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

技术特征:
1.一种支持私有化部署的系统,其特征在于,包括:服务端、前端工具包及前端工具包插件;所述服务端,用于接收用户通过应用程序接口发送的数据包,解析识别json格式的对象,进行序列化及反序列化,并根据用户的path路径,使用深度递归对json格式的对象进行数据结构修改及调整,处理数据节点后判断path路径的存储类型,并将数据存储到服务端的内存,从内存中读取当前用户的session中监听path路径的数据,并对用户进行网络协议的广播行为;所述前端工具包,用于提供应用程序接口,将javascript利用网络协议连接到服务端,并使用应用程序接口通过网络协议发送数据包到服务端,调用浏览器的内存直接执行callback,实现实时数据的回调,同时对于普通的查询,使用once的应用程序接口进行操作指令的执行,在服务端识别后从浏览器中获取该节点的值,并做单独的session广播;所述前端工具包插件,用于对原有的前端工具包进行封装,支持在node.js的npm环境中执行客户端工具包,并发送指令到服务端进行数据的持久化操作、获取、监听动作。2.根据权利要求1所述的一种支持私有化部署的系统,其特征在于,所述提供应用程序接口,将javascript利用网络协议连接到服务端包括以下步骤:通过调通一行应用程序接口命令,快速实现私有部署的服务端的连接;程序通过服务端的js-sdk,自动调用节点路径控制器;节点路径控制器对此次请求以及数据进行识别和解析,生成序列化字符串,并利用sdk解析序列化字符串;解析序列化字符串后生成对应的序列化json字符串;通过浏览器h5规范标准接口将网络协议的发送到服务端。3.根据权利要求1所述的一种支持私有化部署的系统,其特征在于,所述利用网络协议包括:操作指令、操作路径、操作数据及回调函数。4.根据权利要求1所述的一种支持私有化部署的系统,其特征在于,所述接收用户通过应用程序接口发送的数据包,解析识别json格式的对象,进行序列化及反序列化,并根据用户的path路径,使用深度递归对json格式的对象进行数据结构修改及调整包括以下步骤:通过服务端与浏览器的握手实现服务端与浏览器客户端的长连接,当浏览器的客户端通过无服务系统的js-sdk发送到服务端时,服务端会通过消息处理器做首要数据接收入口处理;在消息处理器中会优先获取网络协议长连接传递过来的消息字符串,并进行反序列化操作,获得json对象;从session会话中获取客户端的sessionid及websocket_session,并识别用户会话id及每个会话请求监听的多个客户端的子会话id;系统识别客户端通信过来的行为动作,并根据不同的动作做对应的操作。5.根据权利要求4所述的一种支持私有化部署的系统,其特征在于,所述操作包括查询、监听、更新、新增及删除。6.根据权利要求1所述的一种支持私有化部署的系统,其特征在于,所述将数据存储到服务端的内存包括内存存储、redis缓存存储、mongodb存储三种存储方式。7.根据权利要求1所述的一种支持私有化部署的系统,其特征在于,所述从内存中读取
当前用户的session中监听path路径的数据,并对用户进行网络协议的广播行为还包括以下步骤:服务端判断用户的请求行为,并对数据进行持久化存储。8.根据权利要求7所述的一种支持私有化部署的系统,其特征在于,所述服务端判断用户的请求行为,并对数据进行持久化存储包括以下步骤:用户请求更新数据节点数据;服务端在收到命令并处理完毕数据到数据库中持久化后,自行构建返回消息体。9.根据权利要求1所述的一种支持私有化部署的系统,其特征在于,所述调用浏览器的内存直接执行callback,实现实时数据的回调还包括以下步骤:服务端通过核心包的核心消息推送方法进行消息推送,且推送中包含准确的用户会话id及封装完毕的响应;其中,所述封装完毕的响应包括callbackid、code及value。10.一种支持私有化部署的方法,用于实现权利要求1中所述支持私有化部署的系统,其特征在于,该方法包括以下步骤:s1、通过服务端提供应用程序接口,并将javascript利用网络协议连接到服务端;s2、利用网络协议,用户通过应用程序接口发送数据包到服务端;s3、服务端接收到用户通过应用程序接口发送来的数据包,解析识别json格式的对象,进行序列化及反序列化,并根据用户的path路径,使用深度递归对json格式的对象进行数据结构修改与调整;s4、利用服务端处理数据的节点,并判断path路径的存储类型,将数据存储到服务端的内存;s5、服务端从内存中读取当前用户的session中监听path路径的数据,对用户进行网络协议的广播行为,并调用浏览器的内存直接执行callback,实现实时数据的回调;s6、对于普通的查询,使用once的应用程序接口进行操作指令的执行,服务端识别后,从浏览器中获取该节点的值,并做单独的session广播。

技术总结
本发明公开了一种支持私有化部署的系统及方法,该系统包括服务端、前端工具包及前端工具包插件,该方法包括以下步骤:S1、通过服务端提供应用程序接口,将javascript利用网络协议连接到服务端;S2、利用网络协议,用户通过应用程序接口发送数据包到服务端;S3、服务端接收到用户通过应用程序接口发送来的数据包,解析识别json格式的对象,进行序列化及反序列化,并根据用户的path路径,使用深度递归对json格式的对象进行数据结构修改与调整。本发明可以让授权使用本发明的研发公司灵活使用自己的服务器,不强行捆绑用户使用SaaS模式付费使用本技术系统。费使用本技术系统。费使用本技术系统。


技术研发人员:侯向鹏
受保护的技术使用者:南京芒可可信息科技有限公司
技术研发日:2022.02.08
技术公布日:2022/3/8

最新回复(0)