0

伙计们,如果有人使用 Pushy 向 Apple 设备发送 Apple 通知,我有一个关于 ApnsClient 的基本问题。

该文档声称“客户端可以配置为仅使用一个连接”,但执行此操作的唯一方法 AFAIK 是同步使用客户端(无 lambda);也许可以这样配置,但我不知道如何配置。

更重要的是,如果可以在创建客户端时指定 EventLoopGroup(即线程池),为什么需要创建多个 ApnsClient?

Pushy 建立在 Netty 之上,这是一个异步事件驱动的网络应用程序框架。Netty 严重依赖“事件循环”的概念,它在单个线程上串行执行任务。在 Pushy 中,与 APNs 服务器的单个连接绑定到单个事件循环,因此是单个线程。调用者可以配置 ApnsClient 实例以打开到 APNs 服务器的多个并发连接,并使用不同大小的 EventLoopGroups(本质上是事件循环的线程池)。

因为连接绑定到单个事件循环(绑定到单个线程),所以在事件循环中为 ApnsClient 提供比并发连接更多的线程是没有意义的。配置为仅维护一个连接的八线程 EventLoopGroup 的客户端将使用该组中的一个线程,但其他七个将保持空闲状态。在少量线程上打开大量连接可能会通过增加 CPU 时间的竞争而降低整体效率。

4

1 回答 1

0

我正在使用 Pushy。可以选择设置并发连接数(builder.setConcurrentCONnection())。所以我的理解是对于一个客户端,我们可以有多个并发连接。但是我想弄清楚我们如何设置线程池的大小(EventPoolGroup)。线程池大小和并发连接数应该相等,每个线程有 1 个连接。我认为只有当我们需要连接到 APN 服务器上的不同主题时,我们才需要多个 APNSClient 对象。即使一个 APNSClient 也可以连接到多个主题,但为了使不同主题的呼叫分开,我们可以有不同的 APNS 客户端对象。你可以根据流量分离连接配置。

于 2020-09-17T08:58:26.520 回答