`
w54653520
  • 浏览: 23139 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

多线程推送 push JavaPNS 2.1

阅读更多

以前用的 javapns-jdk15-165.jar 不支持多线程。后来在网上找到新的一个jar,可以支持多线程发送,与大家分享一下,不知道写的对不对,不对的话请指出,多谢。

将消息以多线程方式推送到iPhone服务器,不知道写的对不对,我在本地上测试是没有问题的,如有疑问请留言。

以下项目所用的jar包:

JavaPNS_2.1.jar

bcprov-jdk16-145-1.jar

log4j-1.2.15.jar

只记得这几个jar,如果不对,请留言我在看一下,多谢指正

JavaPNS_2.1.jar 地址

http://code.google.com/p/javapns/ 

 

public static void main(String[] args){
    String keystore = "D:/XXXXXXXX/XXX.p12";//证书路径和证书名
    String password = "XXXXXXXX"; // 证书密码
    String token = "XXXXXX XXXXXX XXXXXX XXXXXX XXXXXX XXXXXX XXXXXX XXXXXX";// 手机唯一标识
    boolean production = true; // 设置true为正式服务地址,false为开发者地址
    int threadThreads = 10; // 线程数
try {
        // 建立与Apple服务器连接
        AppleNotificationServer server = new AppleNotificationServerBasicImpl(keystore, password, production  );
	List<PayloadPerDevice> list = new ArrayList<PayloadPerDevice>();
	PushNotificationPayload payload = new PushNotificationPayload();
	payload.addAlert("推送内容");
	payload.addSound("default");// 声音
        payload.addBadge(1);//图标小红圈的数值
	payload.addCustomDictionary("url","www.baidu.com");// 添加字典 
	PayloadPerDevice pay = new PayloadPerDevice(payload,token);// 将要推送的消息和手机唯一标识绑定
	list.add(pay);

        NotificationThreads work = new NotificationThreads(server,list,threadThreads);// 
	work.setListener(DEBUGGING_PROGRESS_LISTENER);// 对线程的监听,一定要加上这个监听
	work.start(); // 启动线程
	work.waitForAllThreads();// 等待所有线程启动完成

 } catch (Exception e) {
	e.printStackTrace();
		}
}
 

 

// 线程监听
public static final NotificationProgressListener DEBUGGING_PROGRESS_LISTENER = new NotificationProgressListener() {
		public void eventThreadStarted(NotificationThread notificationThread) {
			System.out.println("   [EVENT]: thread #" + notificationThread.getThreadNumber() + " started with " + " devices beginning at message id #" + notificationThread.getFirstMessageIdentifier());
		}
		public void eventThreadFinished(NotificationThread thread) {
			System.out.println("   [EVENT]: thread #" + thread.getThreadNumber() + " finished: pushed messages #" + thread.getFirstMessageIdentifier() + " to " + thread.getLastMessageIdentifier() + " toward "+ " devices");
		}
		public void eventConnectionRestarted(NotificationThread thread) {
			System.out.println("   [EVENT]: connection restarted in thread #" + thread.getThreadNumber() + " because it reached " + thread.getMaxNotificationsPerConnection() + " notifications per connection");
		}
		public void eventAllThreadsStarted(NotificationThreads notificationThreads) {
			System.out.println("   [EVENT]: all threads started: " + notificationThreads.getThreads().size());
		}
		public void eventAllThreadsFinished(NotificationThreads notificationThreads) {
			System.out.println("   [EVENT]: all threads finished: " + notificationThreads.getThreads().size());
		}
		public void eventCriticalException(NotificationThread notificationThread, Exception exception) {
			System.out.println("   [EVENT]: critical exception occurred: " + exception);
		}
	 };
 

 

 

分享到:
评论
12 楼 鐜嬫旦 2013-04-02  
这玩意不行啊,2.2版本支持群发,还有我们针对推送不成功的设备怎么处理?
11 楼 estn_h 2012-12-18  
LZ这个在2.2里面已经全部实现了直接调用这个方法就OK!Push.payloads(p12, "com.scpii.app33166", true, 10, payloadPerDevicesList); 
谢谢你的文章!
10 楼 java-cn 2012-10-25  
请问楼主这个bcprov-jdk16-145-1.jar包,在哪里用到了??
9 楼 moon198654 2012-09-12  
楼主,有两个问题不知道你思考过没:
第一个,一般这种推送消息什么时候产生我们是不可预知的,为了保证消息的实时性,苹果API里提供的多线程只能在我们有大量消息产生,并且有阻塞的时候才会用它的API,所以我们自己肯定要实现一套线程模型去处理实时消息。并且消息要按“队列”推送,保证客户端收到的数是正确的,比如我给同一台iphone并发推送1、2、3、4,并发推送时要保证到达顺序也是这个,javapns里实现了这个机制,但我不太清楚它是怎么实现的。
第二个,如果我们实现实时推送,是否每次都要去读那个证书,然后推送,这样读证书操作会浪费很多性能。能不能读出来一直放在内存里,没此要推从内存拿。
8 楼 kevinsong331331 2012-06-06  

我执行的时候,老是报以下错误的!

[[16777217] not transmitted to token 78368..2e0f4  javapns.communication.exceptions.InvalidCertificateChainException: Invalid certificate chain (Received fatal alert: certificate_unknown)!  Verify that the keystore you provided was produced according to specs...]
7 楼 xytdman 2012-04-19  
请教一个问题,你这种方案适合一次向N多用户发送通知,我这边的应用场景是当这个用户有新的留言的时候向该用户推送通知,也就是说我每次推送只给一个用户,如果5000个用户在留言的话,我的并发将非常高,每次与apns建立连接就推一条然后连接就断开,这样效率是否太低了,能否有什么方案可以解决
6 楼 w54653520 2012-04-09  
你可以先试一下效率,不过两千到一万应该是没有问题,如果有问题的话,最好自己写与苹果服务器的通信了,先了解一下苹果服务器的特性
5 楼 jiafu0773 2012-03-26  
jiafu0773 写道
正是需要的,非常感谢,现在JavaPNS更新到2.2了

但我还有一个问题,假若我的线程达到两千甚至上万的话,会怎么样?
4 楼 jiafu0773 2012-03-26  
正是需要的,非常感谢,现在JavaPNS更新到2.2了
3 楼 kanhai001 2012-03-19  
kanhai001 写道
非常感谢.正是所需要的.

2 楼 kanhai001 2012-03-19  
非常感谢.正是所需要的.
1 楼 javajiangyijin 2012-03-05  
非常感谢!

相关推荐

    苹果推送多线程

    在iOS应用开发中,苹果推送服务(Apple Push Notification service,简称APNs)是苹果公司提供的一项功能,允许开发者向已安装其应用的用户发送实时通知。为了提高推送效率和响应速度,多线程技术常常被引入到APNs的...

    JavaPNS_2.2消息推送.zip

    - JavaPNS_2.2.jar考虑到了高并发场景,提供了多线程支持,可以高效地处理大量设备的推送需求。 - 通过合理的线程管理和连接池,可以有效地减少延迟并提高推送效率。 5. **异常处理与日志记录**: - 包含完善的...

    JAVA JavaPNS-2.2 实现iphone的推送通知

    9. **多线程与并发**:对于大规模推送场景,JavaPNS可能需要利用多线程或异步处理来并发处理多个推送任务,提高整体性能。 10. **日志记录**:为了便于调试和监控,JavaPNS提供了日志功能,可以记录推送过程中的...

    java-Push开源实时消息推送系统

    它丰富的类库和强大的社区支持使得开发者能够快速构建复杂的业务逻辑,同时,Java的内存管理和多线程机制也使得处理高并发推送任务成为可能。 2. **实时消息推送原理** 实时消息推送通常采用HTTP长轮询、WebSocket...

    百度ping多线程挂机多开推送工具.zip

    "百度ping多线程挂机多开推送工具.zip" 是一个压缩包文件,其中包含的工具主要用于SEO(搜索引擎优化)操作。"百度ping"指的是向百度搜索引擎发送通知,告知其网站或页面有更新的行为。"多线程"意味着该工具能同时...

    Delphi 线程控件BMDThread2.1(D5-XE10,XE10.3).rar

    《Delphi线程控件BMDThread2.1:实现高效多线程编程》 在软件开发中,多线程技术是提升程序性能和用户体验的关键技术之一。在Delphi环境中,BMDThread控件提供了强大的支持,使得开发者能够轻松地在D5到XE10.3版本...

    JavaPNS_2.2.zip iphone push

    5. **多线程处理**:为了提高性能,JavaPNS通常在多个线程中同时发送推送通知。这样可以显著减少大量推送时的延迟。 6. **持久化策略**:JavaPNS可以配置为持久化推送请求,以防止在网络中断或其他异常情况下丢失...

    定时任务+缓存+极光消息推送+多线程处理+单表查询优化

    本方案聚焦于五个核心领域:定时任务、缓存、极光消息推送、多线程处理以及单表查询优化,旨在提升系统的整体性能。 1. **定时任务**:定时任务在电商系统中广泛应用于促销活动的触发、数据统计、用户行为分析等多...

    多线程下的websocket实时通信

    Fleck.dll支持websocket引自博客文章多线程下的websocket实时通信,具体使用方式请看文章多线程下的websocket实时通信,包括具体的服务器端跟客户端编码。

    .net实现Server Push(服务器推送)源码

    在.NET开发环境中,"Server Push"技术是一种允许服务器主动向...通过深入分析和理解这些源码,开发者不仅可以学习到如何在.NET环境中实现Server Push,还可以了解到网络通信、多线程编程、异步处理等多个方面的知识。

    java调用apns推送的实现

    - **性能优化**:保持长连接以减少每次推送时的连接建立时间,同时,可以使用多线程或异步处理来并发发送推送,提高推送速度。 - **反馈服务**:APNs提供了反馈服务,可以获取到不再接收推送的设备Token,及时清理...

    使用Java实现高并发推送服务.pdf

    推送服务(Push Notification)通过改变这一模式,即服务器主动向客户端发送信息,而不需要用户主动发起请求,从而提高了消息推送的实时性和用户体验。此外,推送服务通常需要与客户端保持一个长连接,以便在需要时...

    DWR 后台推送(线程监听、多页面推送,附完整实例)

    里面有详细的注释说明,主要实现DWR推送、线程监听、事件监听、主动推送。。写得不好,请见谅。。然后有个特别需要注意的,部署好项目以后,访问的方式是:http://localhost:9999/MonitorSystem/indexTo,特别注意...

    ios推送java写的后台

    6. **优化推送性能**:为了提高推送效率,可以采用多线程或异步处理,避免阻塞主线程。同时,合理设置推送消息的优先级,避免不必要的资源消耗。 7. **测试与监控**:在实际部署前,应进行充分的测试,确保各种情况...

    C#多线程互斥实例 多线程获取同一变量

    在编程领域,多线程是实现并发执行任务的重要机制,特别是在现代计算机系统中,多核处理器使得多线程成为提高程序性能的关键手段。C#语言提供了丰富的多线程支持,让我们能够编写出高效的多线程应用程序。在这个"多...

    爬虫漏洞推送给长亭xray处理,支持多线程,支持server酱自动推送漏洞预警到微信.zip

    爬虫漏洞推送给长亭xray处理,支持多线程,支持server酱自动推送漏洞预警到微信.zip

    c# 多线程 上位机

    2.1 数据采集与处理:在上位机中,多线程可以用于并行处理数据采集和数据分析,避免因单一线程阻塞而导致的延迟。 2.2 UI更新与后台处理:通过创建后台线程执行耗时操作,主线程(UI线程)可以保持流畅,提高用户...

    E4A配合易语言服务器发送推送消息例子源码

    常见的消息推送服务有Google的Firebase Cloud Messaging (FCM) 和Apple的Push Notification Service (APNs)。在本示例中,可能使用的是自建的服务器或第三方推送服务,通过HTTP/HTTPS协议与E4A客户端进行通信。 ...

    稳定、方便、实用的VB6多线程技术(附老马的ActiveX多线程示例)

    多线程技术是现代软件开发中的重要概念,它允许程序同时执行多个任务,从而提高效率和响应性。VB6虽然相对老旧,但其支持的多线程功能依然具有实用性,尤其是在处理耗时操作或需要并发执行任务的应用场景。 VB6中的...

    Qt 多线程及简单实例 demo

    Qt 多线程及简单实例 demo。 多线程的几大特点: 1.多线程的执行顺序无法保证,与操作系统的调度策略和线程优先级等因素有关。 2.多线程的切换可能发生在任何时刻、任何地点。 3.多线程对代码的敏感度高,因此对...

Global site tag (gtag.js) - Google Analytics