好久没写东西了,近期在研究Jenkins,大家有兴趣可以一起来玩玩交流,学习DevOps还是蛮重要。

近期我负责的项目里需要APNs的通知,这个自己单独开发还是蛮费功夫,故用了第三方开源的PushSharp。里面倒是有很多对接的通知,类似亚马逊,GSM,黑莓,Windows,还有就是苹果。

首先我先说说使用中碰到的问题,在对接后密集请求发送到APNs的服务端时,一般常会碰到两种情况,一个是InvalidToken和ConnectionError,但它里面有个小小的潜规则,就是连续反馈InvalidToken情况下,后续不管你是正确的Token它都会拒绝你连接,直接反馈ConnectionError,反正我时常碰到这种情况,后来查了度娘后有人据说苹果的APNs这种做是为了防止恶意的攻击,想想如果人家随便生成一个无效Token去大量请求你,APNs还能忍受嘛,肯定连续拒绝,当然过一段时间肯定又能发送了,因为它不会禁IP。

我碰到这种没有请求通知成功的,可以筛选出ConnectionError再次请求发送通知就可以了。还有如果你觉得它的发送请求太慢可以调整内部连接对象池的数量,代码如下:

var config = ApnsConfigurationFactory.CreateConfiguration();
var apnsBroker = new ApnsServiceBroker(config);
apnsBroker.ChangeScale(10);//内部连接对象池数量,建议10个足够用,一般四核机可控制在最高40%
apnsBroker.Start();

如果机器够强悍,你可以开多点,20,30,50都可以,开的越多,他能更快的处理大并发请求通知。

对了,关于PushSharp我在部署生成环境后,发现大并发发送请求会导致服务宕机,发现两大问题:

一、Console.WriteLine的方法里最终在Buffer部分会导致内存溢出,故我把这块代码给禁闭了,代码如下调整:

        static Log()
{
counters = new Dictionary<CounterToken, Stopwatch>();
loggers = new List<ILogger>();
#if DEBUG
AddLogger(new ConsoleLogger());
#endif
}

以上是在PushSharp.Core.Log类里的静态构造函数调整了代码,我不让执行Console.WriteLine

二、是关于内部没有用线程安全队列导致的问题,也会宕机,我替换成线程安全队列,图片如下:

改动位置:PushSharp.Apple.ApnsConnection

经以上改动目前运行也是良好,未出现宕机,也希望给各位踩坑的朋友带来警示。

改动后的DLL如果大家需要可找我要

【苹果通知APNs】不知道大家用过PushSharp没?的更多相关文章

  1. ZPush--基于netty4实现的苹果通知推送服务(APNs)Javaclient

    简单说下实现苹果通知推送服务(APNs)client的一些要注意的地方: 使用长连接: sanboxserver是无用的,调试时直接用"gateway.push.apple.com" ...

  2. 苹果通知推送服务(APNS)一些关键特性摘要

    http://ramosli.iteye.com/blog/1940843 前段时间,仔细研究了APNS的文档,把一些关键的地方记录了下来,弄懂这些对于理解APNS的规则,至关重要. 1. If AP ...

  3. 苹果通知推送服务(APNS)关键特性摘要

    1. If APNs attempts to deliver a notification but the device is offline, the notification is stored ...

  4. 远程通知APNs(Apple Push Notification Server)

    推送通知是由应用服务提供商发起的,通过苹果的APNs(Apple Push Notification Server)发送到应用客户端.下面是苹果官方关于推送通知的过程示意图: 推送通知的过程可以分为以 ...

  5. 今天花了好长的时间终于把SecureCRT安装成功了 现在分享给大家 安装的步骤, 希望对大家用帮助

    转载地址:https://www.cnblogs.com/lianghe01/p/6618651.html 今天花了好长的时间终于把SecureCRT安装成功了 现在分享给大家 安装的步骤, 希望对大 ...

  6. 主站sinox.org堵塞太厉害,大家用sinox.3322.org訪问

    近期 www.sinox.org域名堵塞太厉害了.差点儿不能訪问,如今大家用sinox.3322.org訪问 sinox.org仅仅是显示正在建设 一直以来sinox.org仅仅是个摆设,并非主要域名 ...

  7. iOS之 APNs全新的APNs苹果15年WWDC大会上的干货

    记得14年在dl某大学校招上现场面试iOS时候被问到了APNs也就是苹果的推送问题,当时我表示一脸懵逼,因为当时还没有真正接触做过项目也就了解了个大概,总之当时回答的一塌糊涂!后来回去就在网上仔细查了 ...

  8. 制作苹果推送通知APNS服务器证书文件

    1.准备证书申请文件 打开苹果电脑实用工具里的钥匙串访问程序 选择钥匙串访问—>证书助理—>从证书颁发机构申请证书 输入邮件地址,常用名词随便命名,在这里命名为APNS 选择存储到磁盘,将 ...

  9. APP快速通过苹果AppStore审核九大诀窍

    [IT168技术]对于移动应用开发者来说, 最令人沮丧的可能莫过于辛辛苦苦开发的应用, 没能通过苹果AppStore的审核,或者在应用更新时遭遇下架.苹果的AppStore的审核流程和标准, 一向不透 ...

随机推荐

  1. vue + websocket 的使用

    阳光正好,我们正在努力前行. 一.引言 初始使用websocket ,一开始看文档的时候,觉得很简单,只需要创建websocket实例,然后有几个监听打开连接,监听关闭连接,监听连接异常等方法.但是, ...

  2. 阿里云 DTS 实践

    控制台 https://dts.console.aliyun.com/#/task/basic/ 操作 填写源目标和目的数据库信息 选择需要迁移的数据库 检查通过 现在好像是免费的,计时收费也很便宜 ...

  3. 将DataRow拷贝到另一个DataRow

    DataRow dr = dtPadFluid.Rows[gvPadFluid.FocusedRowHandle]; foreach (DataColumn dc in _dr.Table.Colum ...

  4. kvm虚拟机克隆

    1.先关闭被克隆的虚拟机: 2.克隆命令 virt-clone -o 192.168.0.242_sw_web -n 192.168.0.163_nginx -f /data/kvm/images/1 ...

  5. layui 表格内容显示更改

    在cole 中使用temple 属性进行修改 例: table.render({ elem: '#messageTable' ,id: 'search_table_mId' ,height: 500 ...

  6. Http 1.x弊端与Http 2.0比较

    HTTP2.0作为新版协议,改动细节必然很多,不过对应用开发者和服务提供商来说,影响较大的就几点. 新的二进制格式(Binary Format) http1.x诞生的时候是明文协议,其格式由三部分组成 ...

  7. [Swift]LeetCode35. 搜索插入位置 | Search Insert Position

    Given a sorted array and a target value, return the index if the target is found. If not, return the ...

  8. [Swift]LeetCode494. 目标和 | Target Sum

    You are given a list of non-negative integers, a1, a2, ..., an, and a target, S. Now you have 2 symb ...

  9. [Swift]LeetCode591. 标签验证器 | Tag Validator

    Given a string representing a code snippet, you need to implement a tag validator to parse the code ...

  10. Linux 实现服务器之间时间同步

    在主服务器上安装NTP时间同步服务器 yum -y install ntp vim /etc/ntp.conf  手动添加两行 server 127.127.1.0 fudge 127.127.1.0 ...