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

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

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

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

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

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

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

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

  1. static Log()
  2. {
  3. counters = new Dictionary<CounterToken, Stopwatch>();
  4. loggers = new List<ILogger>();
  5. #if DEBUG
  6. AddLogger(new ConsoleLogger());
  7. #endif
  8. }

以上是在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. 201771010118 马昕璐《面向对象程序设计java》第十二周学习总结

    第一部分:理论知识学习部分 用户界面:用户与计算机系统(各种程序)交互的接口 图形用户界面:以图形方式呈现的用户界面 AET:Java 的抽象窗口工具箱包含在java.awt包中,它提供了许多用来设计 ...

  2. RSA算法加解密

    package org.thcic.ejw.util.encrypt; import java.io.ByteArrayOutputStream; import java.security.Key; ...

  3. 一、开水白菜(steamed Chinese cabbage in supreme soup)

    菜品历史 相传,开水白菜是由颇受慈禧赏识的川菜名厨黄敬临在清宫御膳房创制的. 黄敬临当厨时,不少人贬损川菜"只会麻辣,粗俗土气",为了破谣立证,他冥思苦想多时并经由百番尝试,终于开 ...

  4. Expedition---POJ - 2431

    A group of cows grabbed a truck and ventured on an expedition deep into the jungle. Being rather poo ...

  5. mysql中Table is read only的解决方法

    首先去到mysq的bin目录 cd /usr/local/mysql/bin 执行如下mysqladmin ./mysqladmin -p flush-tables 接着输入数据库存的root密码即可

  6. Filter(过滤器)

    一.Filter简介 Filter也称之为过滤器,它是Servlet技术中最激动人心的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态 ...

  7. xgboost 多gpu支持 编译

    xgboost 多gpu支持 编译 Ubuntu 18.04.2Linux 4.15.0-46-genericgcc (Ubuntu 7.3.0-27ubuntu1~18.04) 7.3.0 cuda ...

  8. js操作DOM对象

    js操作DOM对象  (Document Object Model)文档对象模型 nodeType返回值 1:元素节点 2:属性节点 3:文本节点 8:注释节点 9: 文档节点 nodeName 节点 ...

  9. RabbitMQ in Action (2): Running and administering Rabbit

    Server management the Erlang node and the Erlang application Starting nodes multiple Erlang applicat ...

  10. storm集群架构

    一.storm何许人也? Storm 是Twitter的一个开源框架.Storm一个分布式的.容错的实时计算系统,它被托管在GitHub上,遵循 Eclipse Public License 1.0. ...