APNs推送的测试工具(使用新的HTTP2 api)

github:

https://github.com/wardenlym/apns2-test

* 目前只支持linux,不过打算加上mac的支持。等我有mac的。。。。。

并没有用epoll用的poll,理论上是可以编译的谁有mac帮我编译一下提交pull request啊!

pre-release 里面的二进制文件是给我公司centos6.3编的,不是通用的版本,请无视

 

对于 libssl 和 libcrypto 是动态链接依赖的,运行环境需要保证有这两个动态库,当然没有这个也肯定没法连ssl链接!

需要能编译过nghttp2,简单的说,如果你在ubuntu下,大概需要这些必备:

sudo apt-get install g++ make binutils autoconf automake autotools-dev libtool pkg-config libssl-dev \
zlib1g-dev libcunit1-dev libxml2-dev

最后3个大概不是必须

为了方便,默认静态连接libnghttp2.a,这样 apns2-test 就可以作为一个单独的工具

(因为我用了go语言版本的 apns2 工具后,觉得静态连接好方便,可以copy。。。。另外有空学习一下制作deb包)

 

然后只需要: make

nghttp2 比较大,clone的时候时间较长,请耐心等待。 

 

用法:

最简用法,只有2个必须参数: 证书,要推送设备的token。

./apns2-test -cert <cert.pem> -token <device-token> 

然后设备就会收到一条 "apns2 test." 的默认测试信息。

 

可选项:

  -dev              开发环境,默认推生产环境
  -debug            详细的日志了连接过程和HTTP请求过程
-topic 不填的话,从证书里面取UID,默认就是应用的bundle-id -message 自定义一个消息内容,比较常用,替换的是alert字段 example: -message "abc test." -payload 如果你对payload中的字段需要详细的指定,这个选项跟-message冲突,不应该同时设置(废话。。。),如果都设置,以-payload为准。 example: -payload '{"aps":{"alert":"payload test.","sound":"default"}}' 还有些没什么太大用的选项,但也留出来方便些: -uri 如果你有特别的代理,可以用来替换苹果默认的域名,这个如果设置了,默认覆盖生产开发选项。你指定哪个地址就推哪个。 -port 如果你要设定端口,默认苹果端口是2197 -prefix 这个一般不用改吧。协议里的header前缀 /3/device/ -pkey 如果需要指定一个私钥文件,正常来说,证书与私钥都在一个pem文件里。默认都从pem里面读取

 

 

自己用来推单条,测试APNs的情况,还是很不错的。命令虽然长了点,但是接口都留出来了。。。。可以自己定制。。。。

自定义apns-id还没有实现,有空加上,这个需要依赖libuuid1

 

打开debug时候的日志,大概是这样的:

[19:24:46] liym:apns2-test git:(master) $ ./apns2-test -cert 1fa5281c6c1d4cf5bb0bbbe0_dis_certkey.pem -topic jpush.wangwei.test -token 73f98e1833fa744403fb4447e0f3a054d43f433b80e48c5bcaa62b501fd0f956 -message "abc test adfadsf." -debug

apns2-test version: 0.0.1
nghttp2 version: 1.9.0-DEV
tls/ssl version: TLSv1.2
ns looking up ...
connecting to : 17.110.227.96
socket connect ok: fd=3, host: api.push.apple.com:2197
ssl allocation ok
ssl handshaking ...
Connected with encryption: ECDHE-RSA-AES256-GCM-SHA384
ssl handshake ok
[INFO] Stream ID = 1
[INFO] C ----------------------------> S (HEADERS)
:method: POST
:path: /3/device/73f98e1833fa744403fb4447e0f3a054d43f433b80e48c5bcaa62b501fd0f956
apns-topic: jpush.wangwei.test
[INFO] C ----------------------------> S (DATA post body)
{"aps":{"alert":"abc test adfadsf.","sound":"default"}}

[INFO] C <---------------------------- S (HEADERS begin)
:status: 200
apns-id: 5D286D27-C672-57FF-BE9E-4C45A6B3D94F
[INFO] C <---------------------------- S (HEADERS end)
[INFO] C ----------------------------> S (GOAWAY)
over.

 

接下来的目标是:

一个json-api的tcp服务,支持大量推送,希望能每秒能推个上万条左右

现在已经写一部分代码了,全部使用无阻塞的方式做io,尽快发布

 

posted @ 2016-03-22 19:27  夜幕の终焉  阅读(5910)  评论(0编辑  收藏  举报