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,盡快發布