小编Pap*_*ipo的帖子

Elixir/erlang在哪里适合微服务方法?

最近我一直在用docker compose进行一些实验,以便部署多个协作微服务.我可以看到微服务提供的许多好处,现在有一个很好的工具集来管理它们,我认为跳进微服务车并不是很难.

但是,我也一直在尝试Elixir,我非常喜欢它本身提供的好处.鉴于它鼓励将代码打包到多个解耦的应用程序中,并支持热代码升级,您如何将docker与elixir(或erlang)混合使用?

例如,如果我想使用docker因为它提供了dev-prod奇偶校验,那么elixir如何适应它?鉴于docker容器是不可变的,我失去了进行热代码升级的能力,对吗?蓝/绿部署或金丝雀发布怎么样?

我的意思是,我可以用Elixir编写微服务并使用它们就像用任何其他语言编写的那样,多语言无论如何都是微服务的好处之一,但是后来我没有得到使用OTP平台的全部好处,我猜测纯粹的协作erlang应用程序比使用中间队列在以不同(或非)语言编写的微服务之间进行通信更为优化.

architecture erlang elixir docker microservices

106
推荐指数
1
解决办法
1万
查看次数

JavaScript中有多人棋盘游戏的框架吗?

我可能会用javascript来开发一个在线棋盘/纸牌游戏.我的方法是让客户端能够以独立模式工作,因此必须执行规则.这意味着,例如,如果玩家不能玩牌,他或她甚至不能玩它.这是为了增强用户体验.

这里的想法是添加钩子以发送和接收来自服务器的事件,并共享在服务器和客户端之间实现游戏规则的代码.我没有看到写两次的意思.

所以,如果我在"服务器"模式下播放时,客户端将更新自己的行为(验证他们也一样)的服务器,服务器将发送我的更新有关的其他玩家.

是否有任何框架可以利用这项工作?

对于服务器端,我的选择似乎是Node.js的(不稳定,但一切都将是JS,这就是纯),二郎+ erlang_js,也许有些怪异的那些框架,即"编译成JavaScript",我是真的没有喜欢.

javascript erlang game-engine node.js

14
推荐指数
1
解决办法
4278
查看次数

使用钢筋处理外部库

我想在我的应用程序中使用一些库,比如https://github.com/Panmind/erlang-ruby-marshal.该repo拥有一个src目录,但没有.app文件(因为它不是一个应用程序),所以我不能使用get-deps.

我尝试了另一种方法,在sub_dirs中添加了一个libs目录,并将repo添加为git子模块,但是rebar不会编译它的任何文件.我猜这个rebar只编译otp应用程序,但不仅仅是编译与应用程序无关的.erl文件.

你如何管理这种依赖?我想避免将文件复制到我的app目录,因为我不认为它们属于那里,我有点像git子模块方法,它允许我跟踪我正在使用的lib版本.

erlang dependency-management rebar

6
推荐指数
1
解决办法
5120
查看次数

如何在移动应用程序中处理过时的缓存记录

我正在创建一个使用REST API的Android应用程序(我的第一个).我使用后台作业来获取内容,我计划使用带有from_id参数的GET请求以获取更多内容.当然,从API获取的任何东西都存储在SQLite数据库中(我正在使用greendao),而应用程序只使用已经存在的数据,以便更加快捷.

所以,问题是:如果在服务器上更新给定记录会发生什么?如果一旦读取的记录被缓存,应用程序将如何注意到有同步更改?哪种策略是可行的解决方案

谢谢.

编辑:

正如Satish P在他的回答中指出的那样,客户端 - 服务器通信是用ETag处理的(我必须添加使用If-Modified-Since的可能性).

但我主要担心的是如何将其与应用UI混合使用.鉴于这个例子:

  1. 从本地数据库中读取已从REST服务检索但客户端的元素列表,以使应用程序更具响应性.
  2. 用户点击其中一个元素并显示详细视图.同样,数据从本地数据库加载.我想在这一点上要求使用ETag或If-Modified-Since标头来获取特定记录的GET请求.
  3. 碰巧服务器返回修改后的记录,因此修改了本地数据,所以现在是时候更新用户看到的内容了.

问题:如果已填充详细视图,因为远程请求返回时已完成本地数据库读取,如何更新视图?我不认为只用更新的数据替换当前数据是可以接受的,用户会看到一个突然的变化.

sqlite rest mobile android synchronization

5
推荐指数
1
解决办法
1388
查看次数

Java中的通用存储库

假设我有这个课程:

public class PhotoRepository  {
    private PhotoDao db;

    PhotoRepository(PhotoDao dao) {
        db = dao;
    }

    public void save(List<Photo> photos) { db.insertOrReplaceInTx(photos); }
    public List<Photo> all()  { return db.loadAll(); }
    public Photo get(Long id) { return db.load(id);  }
}
Run Code Online (Sandbox Code Playgroud)

由于我有更多种类的实体,而不仅仅是Photo,我希望有一个通用的存储库,我可以通过任何类型的Dao.

我已经尝试使用Class<? extends AbstractDao<?, ?>>构造函数的参数,但编译器说de dao方法无法解析.这些方面的东西:

public class Repository<T>  {
    private Class<? extends AbstractDao<T, ?>> db;

    Repository(Class<? extends AbstractDao<T, ?>> dao) {
        db = dao;
    }

    public void save(List<T> items) { db.insertOrReplaceInTx(items); }
    public List<T> all()  { return db.loadAll(); } …
Run Code Online (Sandbox Code Playgroud)

java generics android dry

2
推荐指数
1
解决办法
814
查看次数