小编Mat*_*ips的帖子

在Objective-C中使用不可变集合时,如何执行Clojure之类的操作?

我已经有点沉迷于使用不可变集合(主要是在Clojure中,它称之为"持久数据结构"),并且希望能够在iOS和OS X的某些上下文中以这种方式编程.

这将是有用的一个关键示例是能够通过创建修改后的副本来"更改"字典,并且让更改侦听器能够查询旧值和新值之间的差异,而不是尝试将更改编码为财产变更事件.不可变数据结构也是并发编程的游戏改变者:不需要锁.

是的,您现在可以使用不可变NSArrayNSDictionary实例来执行此操作,但是当您拥有越来越大的集合和/或经常进行更改时,将它们复制到"更改"版本变得越来越低效:对大型数据结构进行小的更改然后涉及不成比例的工作量.

我正在寻找一种在Objective-C中启用不可变数据编程的方法.为了澄清这可能是什么样子,以及它提供的更多优势,Phil Bagwell在这个SO问题中引用的研究具有高度相关性.

clojure objective-c foundation

11
推荐指数
1
解决办法
1020
查看次数

续订时如何让 Netty 服务器重新加载 TLS 证书?

我有一个基于 Netty 的服务器,它使用 PEM 编码的证书文件,这些文件定期重新发布(通过 Let's Encrypt)。Netty 完全支持加载 PEM 加密材料,但是稍后重新颁发证书(.cer 文件)时,需要重新启动服务器才能看到它。

到目前为止,我一直通过添加自定义通道初始化处理程序来添加重新加载证书的逻辑并添加从中构建的适当 SSLHandler 来处理此问题。但是现在我想使用 Aleph,它需要一个用于 TLS 的 Netty SSLContext 对象。

随着 Let's Encrypt 及其相对短暂的证书越来越受欢迎,这似乎是一个热门和普遍的问题,我想正确解决它。这意味着创建 SSLContext 的 Netty 兼容方式,如果它们在磁盘上发生更改,它将重新加载其证书。

我想出的一些方法:

  1. 创建一个动态信任管理器/信任存储,然后将其插入 Netty SSLContextBuilder。可以使用这是一个起点https://jcalcote.wordpress.com/2010/06/22/managing-a-dynamic-java-trust-store/,并使用一些代码以编程方式加载密钥/证书从 PEM 获取 KeyStore(Netty 的 PEM -> KeyStore 逻辑在 SSLContext 类中不是公开的)。好处:也可以在 Netty 之外使用。缺点:复杂且不重用 Netty 的现有逻辑来加载 PEM 密钥和证书。

  2. 将此添加为 Netty 支持的选项。

任何人都可以指出我的解决方案,或提出构建解决方案的最佳方法吗?

java ssl netty aleph

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

标签 统计

aleph ×1

clojure ×1

foundation ×1

java ×1

netty ×1

objective-c ×1

ssl ×1