摘要:项目地址对开发者友好的轻量级中间件,基于。事实上,通过实现自己的类,你可以接入任何持久化方案。假如用到了中的一些高级功能事件订阅等,不可避免的涉及到事件在之间同步等问题。而集群之间的问题,远远不止这一个。
项目地址: https://github.com/RobinQu/datastack
对开发者友好的轻量级RESTful中间件,基于koa。
我会陆续放出一下tutorials,这篇文章纯属datastack 101,希望勾起大家的兴趣。
TL;DRvar datastack = require("datastack"), koa = require("koa"); var app = koa(); datastack(app, { storage: { type: "mongodb", uri: "mongodb://127.0.0.1:27017/zoo" } }); app.resource("cats"); app.resource("dogs"); app.listen(porcess.env.PORT || 8888);More fun Events subscription
https://github.com/RobinQu/datastack/blob/master/spec/ws_subscription_spec.js
datastack自带的组件即可实现将事件的CRUD操作通过广播,在客户端:
var client = new Websocket("ws://localhost:8888/books/_subscription"); client.on("message", function(data) { //json encoded string var event = JSON.parse(data); // event.type === "datastack:create" // event.data === `storeKey`s of created records });
通过datastack的notifier体系,可以轻松接驳Apple APN、Google Push Service,或者其他的sass服务(Mailgun、Urban Airship等),让你快速实现简洁的消息体系。
Data store默认是利用mongo的,但相信不是每个人都喜欢mongo。事实上,通过实现自己的Storage类,你可以接入任何持久化方案。
例如,为测试而写的MemoryStore: https://github.com/RobinQu/datastack/tree/master/src/storage/memory
只需在创建datastack时给定storage属性,
var koa = require("koa"), datastack = require("datastack"), MySuperStorage = require("my-super-storage"); var app = koa(); datastack(app, { storage: new MySuperStorage() });StackApp
尽管datastack中大部分的组件都可以利用mixin的方式应用到原生的koa应用实例上,我们也提供一个koa的子类StackApp,它有如下优势:
更多API shortcut
提供对cluster的一些支持(事件消息传播等)
代码会更简洁
一个简单的例子:
var datastack = require("datastack"); var app = datastack.app({ storage: { type: "mongodb", uri: "mongodb://127.0.0.1:27017/datastack-test" } }); app.resource("book"); app.resource("author"); var port = process.env.PORT || 8888; app.listen(port, function() { console.log("server is up and running"); });StackCluster
这是一个基于recluster 的封装。假如用到了datastack中的一些高级功能(事件订阅)等,不可避免的涉及到事件在cluster之间同步等问题。而集群之
间的问题,远远不止这一个。StackCluster是为了解决这些目前我碰到的一些问题,以及未来架构中可能出现的问题而准备的,推荐使用。
一个完整的例子: https://github.com/RobinQu/datastack/tree/master/example/cluster
项目状况其实在koa出来之后就在计划这个,但是写的好没动力。目前大部分架构已完成,现在的任务:
写更多的测试
更多的存储方案(redis, mysql, 以及混合存储,即多级缓存)
安全认证, 目前仅有有BasicAuth方案
消息通讯
4.1 更多渠道(APN、mail)
4.2 更多底层通讯方式 (zmq, AMQ)
datastack已经在我的个人项目中使用,但数量级还不够证明它的稳定性。
贡献当然是越多越好了,datastack里面已经有很多打开的issues了。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/18730.html
摘要:是基于的插件式开发框架和平常的相比,它无需另外绑定路由集合可拓展开发简单,依照的著名依赖注入框架来制作,让开发者专注于逻辑。采用多服务多进程架构来保证服务的稳定和快速响应能力。的中间件和的中间件保持兼容。默认使用的是后续会提供。 polix是基于koa v2.5.0的IOC、插件式开发框架,和平常的Node.js Web Framework相比,它无需另外绑定路由集合、可拓展、开发简单...
摘要:基于构建的服务器脚手架这是一个基于的轻量级脚手架,支持支持使用编写。脚手架可以根据不同的环境配置不同的信息运行价值,支持开发,测试,生产环境的不同参数配置。 #基于webpack构建的 Koa2 restful API 服务器脚手架 这是一个基于 Koa2 的轻量级 RESTful API Server 脚手架,支持 ES6, 支持使用TypeScript编写。 GIT地址:https...
摘要:语法树这一章主要是完成语法树的生成。其中由于函数声明部分过于简单,没必要生成语法树,打算留到下一章一起处理。主循环结束后数据栈中的第一位元素则为语法树。这是最后生成的语法树总结总之,语法树就算是生成完毕了。 前言 这个系列是关于CodeWars上的一条1Kyu题:Simple Interactive Interpreter。也就是实现一个简单的交互式解释器。题目地址:http://ww...
摘要:也因此,语法树生成过程异常简单,基本是和波兰表达式生成没区别了。这个没啥好讲的了,就是波兰表达式的生成略改而已,改动部分包括多了值栈和参数列表。其中立即量和参数这俩个分别是将数字和参数放入寄存器后压栈。其他的操作则是首先分别执行子节点。 前言 昨天完成了codewars上的1级题简单解释器实现,今天突发奇想上去看看总共有多少1级题,然后发现总共也只有三题。而且,这三题都是编译器解释器相...
阅读 3351·2021-10-13 09:40
阅读 2586·2021-10-08 10:17
阅读 3989·2021-09-28 09:45
阅读 921·2021-09-28 09:35
阅读 1805·2019-08-30 10:51
阅读 2897·2019-08-26 12:11
阅读 1644·2019-08-26 10:41
阅读 3090·2019-08-23 17:10