在Pushy中,为什么要使用多个ApnsClient?

问题描述

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

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

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

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

因为连接绑定到单个事件循环(绑定 到单个线程),再给ApnsClient多一点也没有意义 事件循环中的线程数比并发连接数大。有一个客户 八线程EventLoopGroup,配置为仅维护一个 连接将使用组中的一个线程,而其他七个 将保持空闲状态。在一个小的情况下打开大量的连接 线程数量可能会通过增加线程数量来降低整体效率 争夺cpu时间。

解决方法

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...