Clojure / Clojurescript 中的客户端/服务器反应同步
Client / server reactive sync in Clojure / Clojurescript
有没有一种惯用的方法可以使用 Clojure 和 Clojurescript 在浏览器和服务器之间进行反应式数据同步?一种技术与另一种技术的优缺点是什么?
过去使用过 Meteor.js 这种反应式数据库同步比手动编写路由和轮询更新更可取。 pub/sub 系统可以让网络开发人员编写更少的样板代码来移动数据。 Clojure 似乎很适合这种技术。我一直无法确定这是否是 clj/cljs 生态系统中已解决的问题。
简短的回答是 "no"。
我在生产中使用过 Meteor.js,并且在进入 CLJ(S) 时也在寻找同样的东西。我知道的最接近的是:
- Datsync
- 使用 Datomic 和 Datoms 作为同步协议
- 似乎是 alpha
- Fulcro
- 有助于乐观更新,但不像 Meteor 与 Minimongo 那样直接进行数据同步,更接近 Meteor 方法(即同一调用的客户端和服务器实现)
- 生产就绪,广泛使用
为什么还没有用 CLJ(S) 编写流星杀手?
- 很难做到(根本上,性能上)
- Meteor 背后的公司在过去十年中筹集了 tens of millions of dollars 用于此 space 并且仍然没有解决数据同步设计中的所有可扩展性或语义粗糙边缘
- 人们倾向于使用的 Clojure 数据存储(Datomic 或关系型)可能会使数据同步变得更加困难,而且肯定有很大不同(它不会是 Meteor 实现的端口)。
- Clojure 开发人员倾向于围绕特定 problem/solution/requirement 的需求组装系统,而不是围绕特定 feature/framework 组装解决方案(例如 Mongo 同步全栈的文档).
尽管如此,Clojure 社区内外的人们仍在思考这个问题。查看:
- Baqend (and their blog comparing with Meteor.js, Firebase, RechinkDB)
- "The Web After Tomorrow" (by the developer of DataScript)
- Reactive Datalog
唯一有意义的比较方法是在您的上下文中同时考虑它们。我记得当时放弃 Meteor 的魔法感觉很重要,但还没有发现自己想回去。我将其视为换取简单性和灵活性的魔法。
有没有一种惯用的方法可以使用 Clojure 和 Clojurescript 在浏览器和服务器之间进行反应式数据同步?一种技术与另一种技术的优缺点是什么?
过去使用过 Meteor.js 这种反应式数据库同步比手动编写路由和轮询更新更可取。 pub/sub 系统可以让网络开发人员编写更少的样板代码来移动数据。 Clojure 似乎很适合这种技术。我一直无法确定这是否是 clj/cljs 生态系统中已解决的问题。
简短的回答是 "no"。
我在生产中使用过 Meteor.js,并且在进入 CLJ(S) 时也在寻找同样的东西。我知道的最接近的是:
- Datsync
- 使用 Datomic 和 Datoms 作为同步协议
- 似乎是 alpha
- Fulcro
- 有助于乐观更新,但不像 Meteor 与 Minimongo 那样直接进行数据同步,更接近 Meteor 方法(即同一调用的客户端和服务器实现)
- 生产就绪,广泛使用
为什么还没有用 CLJ(S) 编写流星杀手?
- 很难做到(根本上,性能上)
- Meteor 背后的公司在过去十年中筹集了 tens of millions of dollars 用于此 space 并且仍然没有解决数据同步设计中的所有可扩展性或语义粗糙边缘
- 人们倾向于使用的 Clojure 数据存储(Datomic 或关系型)可能会使数据同步变得更加困难,而且肯定有很大不同(它不会是 Meteor 实现的端口)。
- Clojure 开发人员倾向于围绕特定 problem/solution/requirement 的需求组装系统,而不是围绕特定 feature/framework 组装解决方案(例如 Mongo 同步全栈的文档).
尽管如此,Clojure 社区内外的人们仍在思考这个问题。查看:
- Baqend (and their blog comparing with Meteor.js, Firebase, RechinkDB)
- "The Web After Tomorrow" (by the developer of DataScript)
- Reactive Datalog
唯一有意义的比较方法是在您的上下文中同时考虑它们。我记得当时放弃 Meteor 的魔法感觉很重要,但还没有发现自己想回去。我将其视为换取简单性和灵活性的魔法。