... swooleå·²ç»å级å°4äºï¼ä¸»è¦çç¹æ§æ¯æ´å¥½çæ¯æåç¨ï¼easyswooleä¹ä¸ºäºæ´å¥½æ¯æåç¨æ¨åºäºes3ãææ¬å°ç¯å¢æ¯php7.2.9 centos7
å¨githubä¸è½½ææ°ç3.0çdemoãå°å为ï¼https://github.com/easy-swoole/demo
è¿ç¯æç« ä¸»è¦ä»ç»äºè¯¦è§£thinkphp5+swooleå®ç°å¼æ¥é®ä»¶ç¾¤å(SMTPæ¹å¼)ï¼å ·æä¸å®çåèä»·å¼ï¼æå ´è¶£çå°ä¼ä¼´ä»¬å¯ä»¥åèä¸ä¸
æ¬æä»ç»äºthinkphp5+swooleå®ç°å¼æ¥é®ä»¶ç¾¤å(SMTPæ¹å¼)ï¼å享ç»å¤§å®¶ï¼å ·ä½å¦ä¸ï¼
1ãç¯å¢è¯´æé¿éäºcentos7
thinkphp5.0.11
swoole2.0.8
2ãtpå®ç°é®ä»¶åé
å¨é¡¹ç®ä¸å»ºç«å¦ä¸çæ件ç®å½ï¼
å ¶ä¸SendMail.phpæ¯æ们å®é è°ç¨çåéé®ä»¶çæ件ã以ä¸æ¯ä¸»è¦ä»£ç ï¼
namespace app\library\utils\mail;
use app\library\utils\mail\PhpMailer;
use app\library\utils\mail\Smtp;
use think\Log;
error_reporting(E_STRICT);
date_default_timezone_set('Asia/Shanghai');
class SendMail
{
static function postmail($to,$subject = '',$body = ''){
$mail = new PhpMailer();
$mail->CharSet = config('mail.CharSet');
$mail->IsSMTP();
$mail->SMTPDebug = config('mail.SMTPDebug');
$mail->SMTPAuth = config('mail.SMTPAuth');
$mail->SMTPSecure = config('mail.SMTPSecure');
$mail->Host = config('mail.Host');
$mail->Port = config('mail.Port');
$mail->Username = config('mail.Username');
$mail->Password = config('mail.Password');
$mail->SetFrom(config('mail.From'), config('mail.Name'));
$mail->Subject = $subject;
$mail->MsgHTML($body);
$address = $to;
$mail->AddAddress($address, '');
if(!$mail->Send()) {
Log::write('send to '.$to.'error info:'.$mail->ErrorInfo);
return false;
} else {
return true;
}
}
}
éé¢çconfigé 置项ï¼æ们æ¾å¨é¡¹ç®åºä¸çconfig.phpæ件ä¸ï¼å ·ä½é ç½®å 容å¦ä¸:
//é®ç®±è®¾ç½®
'mail'=>[
'CharSet'=>'UTF-8',
'SMTPDebug'=>0,// å¯ç¨SMTPè°è¯åè½ 0å ³é
'SMTPAuth'=>true,// å¯ç¨ SMTP éªè¯åè½
'SMTPSecure'=>'ssl',// å®å ¨åè®®
'Host'=>'smtp.163.com',// SMTP æå¡å¨
'Port'=>465,// SMTPæå¡å¨ç端å£å·
'Username'=>'**********',// SMTPæå¡å¨ç¨æ·å
'Password'=>'**********',// SMTPæå¡å¨å¯ç
'From'=>'*********@163.com',// å件人é®ç®±
'Name'=>'blue',// å件人é®ç®±
]
2.1è¿éæ们åªæ¯å®ç°äºsmtpåè®®åéçdemoï¼æ以å¨å°è£ çå±é¢ä¸æ²¡æåå°å¾å ¨é¢ï¼ä¸æ¯å¾çµæ´»ãå¾ä¸å ¶ä»ä¸¤ä¸ªæ件(PhpMailer.phpåSmtp.php)æ¯Phpmaileré®ä»¶åéç±»çæ ¸å¿æ件ï¼ä¸ºäºç®åè°ç¨ï¼æ½åäºåºæ¥ï¼è¯¦ç»çç¨æ³ååæ°è®¾ç½®ï¼å¯ä»¥åègayhubç使ç¨è¯´æphpmailer
2.2 注æç¹
å¨æ¤æ¥éª¤ä¸ï¼æ们éè¦æ³¨æå ç¹ï¼1æ¯ä½ 设置çé®ä»¶åéçè´¦å·æ¯å¦å·²ç»å¼å¯SMTP并ä¸æ¾å¯¹å¯¹åºçå®å ¨åè®®å端å£å·ã2ãå½åæå¡å¨æ¯å¦æ¯æSMTPæå¡ï¼è¿è¾¹å¾å¤æ¶åä¼åä¸äºsocketå½æ°çå½±åï¼éå°é®é¢çæ¶åï¼æ们åºè¯¥æSMTPDebugåæ°è®¾ç½®ä¸º1ï¼ç¶åæ ¹æ®debugä¿¡æ¯å»ç»å¿è°è¯ã3ãååºçé®ä»¶æäºä¼è¢«æ¾å ¥åå¾ç®±ï¼æ³¨ææ¥æ¶ã
2.3 è°ç¨
建ç«å¦ä¸çæ件ç®å½ç»æï¼
å¨Index.phpä¸è°ç¨åéé®ä»¶çæ¹æ³,å ·ä½ä»£ç å¦ä¸
public function sendMail(){
if(SendMail::postmail('[email protected]','test','123')){
echo 'send success';
}else{
echo 'send fail';
}
}
2.4 è°ç¨ç»æ
æ们å¯ä»¥å¨QQé®ç®±çåå¾ç®±ä¸æ¾å°æ们åååéçä¸å°é®ä»¶
3ãç»åswooleå®ç°å¼æ¥ç¾¤å3.1å®è£ swoole
swooleæ©å±å®è£ ç详ç»æ¥éª¤å®ç½ä¸é¢é½æï¼ä¸åèµè¿°ï¼swooleææ¡£ä¼ éé¨
å®è£ å®swooleä¹åï¼å»ºè®®ä¸ºèªå·±çIDEå ä¸swooleç代ç æ示ï¼é ç½®IDEæ示swoole代ç çä¼ éé¨
3.2å®ç°å¼æ¥ç¾¤å
æ们å å®ç°å¼æ¥çæå¡ç«¯ï¼
public function syncSend(){
$serv = new \swoole_server('0.0.0.0',8082);
$serv->set(array('task_worker_num' => 4));
$serv->on('receive', function($serv, $fd, $from_id, $data) {
$task_id = $serv->task($data);
echo "å¼å§æéå¼æ¥ä»»å¡ id=$task_id\n";
});
$serv->on('task', function ($serv, $task_id, $from_id, $data) {
echo "æ¥æ¶å¼æ¥ä»»å¡[id=$task_id]".PHP_EOL;
for ($i = 0 ; $i<20;$i++){
if(SendMail::postmail('[email protected]','test',$data)){
echo 'send'.$i.' success'."\n";
}else{
echo 'send'.$i.' fail'."\n";
}
}
$serv->finish('');
});
$serv->on('finish', function ($serv, $task_id, $data) {
echo "å¼æ¥ä»»å¡[id=$task_id]å®æ".PHP_EOL;
});
$serv->start();
}
å¨æå¡ç«¯ï¼æ们ç¨äºä¸ä¸ª20çloopæ¥æ¨¡æäºç¾¤åï¼å®é æ¢æä¸åçemailå°åå°±å¯ã
ä¸é¢æ们å®ç°å®¢æ·ç«¯
public function index()
{
$client = new \swoole_client(SWOOLE_SOCK_TCP, SWOOLE_SOCK_SYNC);
$ret = $client->connect("127.0.0.1", 8082);
if(empty($ret)){
echo 'error!connect to swoole_server failed';
} else {
$client->send('blue');//è¿éåªæ¯ç®åçå®ç°äºåéçå 容
}
}
3.3å¼å¯æå¡ç«¯
è¿éå¿ é¡»è¦ç¨CLIæ¹å¼ï¼æ们è¿å ¥é¡¹ç®çæ ¹ç®å½ã
æ§è¡
netstat -apn | grep 8082
å çæµä¸ä¸8082端å£æ¯å¦è¢«å ç¨ï¼å¦æå ç¨å
kill -9 PID(è¿ç¨å·)
ææ»è¿ç¨
ç¶åæ们æ§è¡
php public/index.php index/index/syncSend
è¿æ¡å½ä»¤çä½ç¨æ¯ç¨cli模å¼æ¥ä½¿æ们ç8082端å£å¤äºçå¬ç¶æãä¸ä¿æè¿ä¸ªç»ç«¯å¤äºæ´»è·ç¶æï¼è¿æ ·æ¹ä¾¿æ们æ¥çåéçç»æã
æ¥çæ们å¯ä»¥ç¨CLIæè æµè§å¨è®¿é®çæ¹å¼æ¥è®¿é®æ们ç客æ·ç«¯
php public/index.php index/index/index
å½æ们æ§è¡ä¸æ¬¡çæ¶å客æ·ç«¯çæ¶åï¼æ们å¯ä»¥å¨æå¡ç«¯çç»ç«¯çå°å±å¹ä¸é¢åºç°å¦ä¸çç»é¢ï¼
说ææ们已ç»æ£å¸¸ç¾¤åäºã
ä¸é¢ï¼æ们就æ¥æµè¯å¼æ¥ï¼å 为163æå¡å¨ä¼å¯¹IPè¿è¡æ£æµï¼å¦æå¨æ个æ¶é´åéä¹å«é¢ç¹çè¯ï¼ä¼åºç°åé失败çæ åµï¼æ以æ们æµè¯çæ¶åï¼éç¨è¿ç»æ§è¡4次客æ·ç«¯çæ¹å¼
ä¸é¢æ¯æ§è¡çç»æï¼
ä»å¾ä¸åéç顺åºæ¥çï¼æ们å¯ä»¥å¾å®¹æçå¤æï¼æ们已ç»å®ç°äºå¼æ¥çåéã
é®ç®±éé¢ä¹æ¥æ¶å°äºåååéçé®ä»¶ã
4ãåè®°~
swooleæ¯ä¸ç§æ³è¦çæåçç»ä½¿ç¨çæ©å±ï¼ä½æ¯éäºç½ç»ç¼ç¨ç¥è¯çä¸è¶³ï¼æ以è¿æ¯è¦å¤å¤æµè¯åå¦ä¹ ï¼demoä¸æä¸è¶³çå°æ¹ï¼è¿è¯·æåºQAQ
以ä¸å°±æ¯æ¬æçå ¨é¨å 容ï¼å¸æ对大家çå¦ä¹ ææ帮å©ï¼æ´å¤ç¸å ³å å®¹è¯·å ³æ³¨ç¹å¡PHPææ¯å客ï¼
ç¸å ³æ¨èï¼
Thinkphp5.0èªå¨çæ模å以åç®å½çæ¹æ³
thinkphpå¤è¡¨æ¥è¯¢ä¸¤è¡¨æéå¤ç¸åå段çå®ç¾è§£å³æ¹æ³
å©ç¨ThinkPHPå ç½®çThinkAjaxå®ç°å¼æ¥ä¼ è¾ææ¯çå®ç°æ¹æ³