目錄
回复讨论(解决方案)
首頁 後端開發 php教程 php ios 群体推送

php ios 群体推送

Jun 23, 2016 pm 01:54 PM
ios php 推播

描述:用php 做服务器端,向IOS的APNS推送通知,附上代码

1

public static function apple_push($data,$deviceToken){  $passphrase='123456';   $ckfile="ck.pem";   $ctx = stream_context_create(); stream_context_set_option($ctx, 'ssl', 'local_cert', $ckfile);  stream_context_set_option($ctx, 'ssl', 'passphrase', $passphrase);  $fp = stream_socket_client('ssl://gateway.sandbox.push.apple.com:2195',$err,$errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx); //$fp = stream_socket_client('ssl://gateway.push.apple.com:2195',$err,$errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx);   if(!$fp){       return false;   }       $payload=json_encode($data);    $pushdata = chr(0) . pack('n', 32) . pack('H*', $deviceToken) . pack('n', strlen($payload)) . $payload; $result = fwrite($fp, $pushdata, strlen($pushdata));    if(!$result){       file_put_contents(dirname(__FILE__)."/pushlog.txt",$result.'-'.$deviceToken."-".microtime().PHP_EOL,FILE_APPEND);   }       fclose($fp);}

登入後複製

单条推送是没有问题的
问题描述:
现在要求群体推送,之前,我写的是用socket链接后,循环写入,再关闭fp,但是有些人没有收到推送,网上说,要是其中一个人的手机令牌(deviceToken)有问题的话,苹果服务器就会中断这个socket链接。
我就改成每个用户都用socket打开,写入,关闭,但是我发现这样很慢,半个小时都不能推送9000条,虽然是后台推送,但是要求劲量在半小时内推送完。
我先在想到的办法是:同时访问这个php页面十次,参数不用,就将要推送的用户分成十份。
不知道有什么好的群体推送方式
附上现在的code

1

function iospush($tid,$subject,$pushinfo){  $data['aps']=array(     'alert'=>$subject,       'sound'=>'default',      'type'=>'thread',        'tid'=>$tid, );  $passphrase='123456';   $ckfile="ck.pem";   $ctx = stream_context_create(); stream_context_set_option($ctx, 'ssl', 'local_cert', $ckfile);  stream_context_set_option($ctx, 'ssl', 'passphrase', $passphrase);      $payload=json_encode($data);    foreach($pushinfo as $info){        $deviceToken=$info['phoneToken'];       $pushdata = chr(0) . pack('n', 32) . pack('H*', $deviceToken) . pack('n', strlen($payload)) . $payload;     $fp = stream_socket_client('ssl://gateway.sandbox.push.apple.com:2195',$err,$errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx);     //$fp = stream_socket_client('ssl://gateway.push.apple.com:2195',$err,$errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx);//正式服务器        if(!$fp){           file_put_contents(dirname(__FILE__)."/pushlog.txt",$err.'-'.$errstr.'-60'.PHP_EOL,FILE_APPEND);         continue;       }       $result = fwrite($fp, $pushdata, strlen($pushdata));        if(!$result){           file_put_contents(dirname(__FILE__)."/pushlog.txt",$result.'-'.$deviceToken.PHP_EOL,FILE_APPEND);       }       fclose($fp);    }}

登入後複製


回复讨论(解决方案)

这种东西肯定需要用异步去实现

试试xmpphp,使用聊天服务器来实现,可能更靠谱一些。

是异步的,但是每次打开,关闭,太浪费时间,不能在半小时内推送完。
用xmpphp倒是没考虑过,既然是异步推送,不用持久连接。

现在我的解决办法是:用pcntl,开十个进程执行

要快就只能?多?程了。

感谢各位的回答,但是在用pcntl的时候,遇到了另一个问题

http://bbs.csdn.net/topics/390829010

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱門文章

倉庫:如何復興隊友
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱門文章

倉庫:如何復興隊友
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱門文章標籤

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

適用於 Ubuntu 和 Debian 的 PHP 8.4 安裝和升級指南 適用於 Ubuntu 和 Debian 的 PHP 8.4 安裝和升級指南 Dec 24, 2024 pm 04:42 PM

適用於 Ubuntu 和 Debian 的 PHP 8.4 安裝和升級指南

CakePHP 日期和時間 CakePHP 日期和時間 Sep 10, 2024 pm 05:27 PM

CakePHP 日期和時間

CakePHP 檔案上傳 CakePHP 檔案上傳 Sep 10, 2024 pm 05:27 PM

CakePHP 檔案上傳

CakePHP 路由 CakePHP 路由 Sep 10, 2024 pm 05:25 PM

CakePHP 路由

CakePHP 專案配置 CakePHP 專案配置 Sep 10, 2024 pm 05:25 PM

CakePHP 專案配置

討論 CakePHP 討論 CakePHP Sep 10, 2024 pm 05:28 PM

討論 CakePHP

CakePHP 快速指南 CakePHP 快速指南 Sep 10, 2024 pm 05:27 PM

CakePHP 快速指南

如何設定 Visual Studio Code (VS Code) 進行 PHP 開發 如何設定 Visual Studio Code (VS Code) 進行 PHP 開發 Dec 20, 2024 am 11:31 AM

如何設定 Visual Studio Code (VS Code) 進行 PHP 開發

See all articles