0

我们正在使用 node-apn lib ( https://github.com/parse-community/node-apn ) 的解析分支——一年前我们切换到这个分支是因为我们的实际问题——但现在它又回来了。

我们发送了大约 1.000.000 条通知,分别分配到不同的子作业,其中一些只是在发送到苹果时挂起,在调用之后 apnProvider.send() ......我们没有得到答复/回调。

这个问题经常在去年年底发生,并且整年都运行良好 - 从上周末开始,问题又回来了 - 我们这边没有任何改变:-(从 40 个流程 1 或 2 只是在那里分解工作。

我们实施了一个解决方法,一个看门狗在 30 秒后看到挂起过程并停止它,但这是一个糟糕的解决方案。我想问是否有人有任何想法来解决它或找出真正的原因。我没有收到错误事件或其他东西。

我们测试了不同的 nodejs 版本并在 ubuntu 服务器上工作——也测试了不同的版本。

最好的祝福。

代码部分:

初始化:

var options = { production: apnsProduction };
options.token = {key: apnsKey, keyId: apnsKeyId, teamId: apnsTeamId };
apnProvider = new apn.Provider(options);

观看活动:

apnProvider.on("transmissionError", function(errCode, notification, device) {
      console.log(...);
});

apnProvider.on("timeout", function () {
   console.log(...);
});

apnProvider.on("disconnected", function() {
   console.log(...);
});

apnProvider.on("socketError", function(err){
   console.log(err);
});

apnProvider.on("goaway", function(err){
   console.log(err);
});

然后我们在 mysql 中有接收器,所以我选择并在一个数组中收集 100 个接收器并将消息发送给它们:

apnProvider.send(message, arrReciver).then( (result) => {

      result.sent.forEach( (token) => {
         transmittedCnt++;
      });

      result.failed.forEach( (failure) => {
         errorCnt++;

         if (failure.error) // A transport-level error occurred (e.g. network problem)
         {
             console.log(...) // some log output ...
         }
         else
         {
            db.deletePushDev("ios", failure.device, "send error " + failure.status + " - " + util.inspect(failure.response));  
         }
      });

      cntSendFunctionsRunning--;
      callback();
   }).catch((result) => {
      console.log(result);
   });

callback() ...确实会继续为接下来的 100 个设备选择获取...希望这很清楚 - 我无法在此处提供整个代码。

4

1 回答 1

0

该问题现在在解析社区的 node-apn 分支的新版本 4.0.0 中得到处理。新版本处理 http2 连接的超时。

问题:https ://github.com/parse-community/node-apn/issues/24

于 2020-10-26T12:08:19.150 回答