解析社区 node-apn fork - 发送作业挂起
parse community node-apn fork - send job hangs
我们正在使用 node-apn lib ( https://github.com/parse-community/node-apn ) 的解析分支 - 我们一年前切换到这个分支,因为我们的实际问题 - 但现在它回来了。
我们正在发送大约 1.000.000 条通知,分别发送给不同的子作业,其中一些只是在调用后发送给 apple 时挂起
apnProvider.send()
...我们没有得到 answer/callback.
这个问题经常发生在去年年底并且全年都运行良好 - 从上周末开始问题又回来了 - 我们这边没有任何改变:-( 从 40 个进程 1 或 2 就在那里分解工作。
我们实施了一个解决方法,一个看门狗在 30 秒后看到挂起的进程并将其停止,但这是一个糟糕的解决方案。我想问问是否有人有任何想法来修复它或找出真正的原因。我没有收到错误事件或其他信息。
我们测试了不同的 nodejs 版本并在 ubuntu 服务器上工作 - 还测试了 differend 版本。
此致。
代码部分:
初始化:
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 中有接收者,所以我做一个 select 并在一个数组中收集 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);
});
回调 () ... 确实会继续 select 获取接下来的 100 台设备 ... 希望这是足够清楚的 - 我无法在此处提供完整的代码。
该问题现在已在解析社区的 node-apn 分支的新版本 4.0.0 中得到解决。新版本处理 http2 连接超时。
我们正在使用 node-apn lib ( https://github.com/parse-community/node-apn ) 的解析分支 - 我们一年前切换到这个分支,因为我们的实际问题 - 但现在它回来了。
我们正在发送大约 1.000.000 条通知,分别发送给不同的子作业,其中一些只是在调用后发送给 apple 时挂起
apnProvider.send()
...我们没有得到 answer/callback.
这个问题经常发生在去年年底并且全年都运行良好 - 从上周末开始问题又回来了 - 我们这边没有任何改变:-( 从 40 个进程 1 或 2 就在那里分解工作。
我们实施了一个解决方法,一个看门狗在 30 秒后看到挂起的进程并将其停止,但这是一个糟糕的解决方案。我想问问是否有人有任何想法来修复它或找出真正的原因。我没有收到错误事件或其他信息。
我们测试了不同的 nodejs 版本并在 ubuntu 服务器上工作 - 还测试了 differend 版本。
此致。
代码部分:
初始化:
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 中有接收者,所以我做一个 select 并在一个数组中收集 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);
});
回调 () ... 确实会继续 select 获取接下来的 100 台设备 ... 希望这是足够清楚的 - 我无法在此处提供完整的代码。
该问题现在已在解析社区的 node-apn 分支的新版本 4.0.0 中得到解决。新版本处理 http2 连接超时。