您好,登錄后才能下訂單哦!
這篇文章主要講解了“怎么用Swoole擴(kuò)展結(jié)合Yii框架和layui實(shí)現(xiàn)聊天系統(tǒng)”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“怎么用Swoole擴(kuò)展結(jié)合Yii框架和layui實(shí)現(xiàn)聊天系統(tǒng)”吧!
一、功能描敘 利用Swoole擴(kuò)展結(jié)合Yii框架和layui 的聊天系統(tǒng)
1、完成了登錄和注冊功能
2、完成了群聊和單聊功能
二、預(yù)覽效果展示
三、部分代碼展示
1、socket 代碼寫在yii 的console下面 單獨(dú)用了一個controller 來整理swoole擴(kuò)展的功能
``<?php /** * Created by PhpStorm. * User: wudg * Date: 16/10/5 * Time: 下午1:31 */ namespace console\controllers; use yii\base\Controller; use yii\helpers\Json; use Yii; use common\models\User; class SwooleController extends Controller { public $fdArr = []; public function actionWebsocket() { $server = new \swoole_websocket_server("0.0.0.0", 9501); $server->set([ 'daemonize' =>true, //守護(hù)進(jìn)程 'log_file' => '/usr/local/var/www/blog/logs/swoole_websocket_logs.log', //日志紀(jì)錄 'heartbeat_check_interval' => 60,//60秒輪詢連接數(shù)
]); $server->on('open', function (\swoole_websocket_server $server, $request) { echo "server: handshake success with fd{$request->fd}\n"; $fd[] = $request->fd; $GLOBALS['fd'][] = $fd; //array_push($this->fdArr,$request->fd);//$request->fd; }); $server->on('message', function (\swoole_websocket_server $server, $frame) { $message_data = json_decode($frame->data, true); echo "receive from {$frame->fd}:{$frame->data},opcode:{$frame->opcode},fin:{$frame->finish}\n"; if(!$message_data) { return ; } switch($message_data['type']) { case 'pong': return; case 'login': $client_name = htmlspecialchars($message_data['client_name']); $new_message = array('type'=>$message_data['type'], 'client_id'=>$frame->fd, 'client_name'=>htmlspecialchars($client_name), 'time'=>date('Y-m-d H:i:s')); if(!isset($message_data['admin_id']) || empty($message_data['admin_id'])) { return ; } //綁定uid和fd User::BindFd($message_data['admin_id'],$frame->fd); //廣播給所有在線用戶 foreach($server->connection_list() as $fd) { $server->push($fd, Json::encode($new_message)); } return; case 'say': //單人發(fā)送信息 $client_name = htmlspecialchars($message_data['to_client_name']); if(!isset($message_data['to_client_id']) || empty($message_data['to_client_id'])) { return ; } //通過uid 獲取fd $fd = User::getFdByUid($message_data['to_client_id']); $new_message = array( 'type'=>'say', 'from_client_id'=>isset($message_data['from_client_id']) ? $message_data['from_client_id'] : 0, 'from_client_name'=>isset($message_data['from_client_name']) ? $message_data['from_client_name'] : 0, 'to_client_name' =>$client_name, 'avatar' => 'http://tp2.sinaimg.cn/1783286485/180/5677568891/1', 'to_client_id'=>$message_data['to_client_id'], 'content'=>nl2br(htmlspecialchars($message_data['content'])), 'time'=>date('Y-m-d H:i:s'), ); $server->push($fd, Json::encode($new_message)); return; case 'group'://群組發(fā)送 $client_name = htmlspecialchars($message_data['to_client_name']); if(!isset($message_data['to_client_id']) || empty($message_data['to_client_id'])) { return ; } $new_message = array( 'type'=>'group', 'from_client_id'=>isset($message_data['from_client_id']) ? $message_data['from_client_id'] : 0, 'from_client_name'=>isset($message_data['from_client_name']) ? $message_data['from_client_name'] : 0, 'to_client_name' =>$client_name, 'avatar' => 'http://tp2.sinaimg.cn/1783286485/180/5677568891/1', 'to_client_id'=>$message_data['to_client_id'], 'content'=>nl2br(htmlspecialchars($message_data['content'])), 'time'=>date('Y-m-d H:i:s'), ); //暫時將所有信息都廣播給除自己之外的所有用戶 后期再做這部分的優(yōu)化信息 foreach($server->connection_list() as $fd) { if($fd == $frame->fd) continue; $server->push($fd, Json::encode($new_message)); } return; default: return; } }); $server->on('close', function ($server, $fd) { $userInfo = User::getUidByFd($fd); $new_message = [ 'type' =>'logout', 'name' => $userInfo->username, ]; foreach($server->connection_list() as $_fd) { if($fd == $_fd) continue; $server->push($_fd, Json::encode($new_message)); } echo "client {$fd} closed\n"; }); $server->start(); }
}
感謝各位的閱讀,以上就是“怎么用Swoole擴(kuò)展結(jié)合Yii框架和layui實(shí)現(xiàn)聊天系統(tǒng)”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對怎么用Swoole擴(kuò)展結(jié)合Yii框架和layui實(shí)現(xiàn)聊天系統(tǒng)這一問題有了更深刻的體會,具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識點(diǎn)的文章,歡迎關(guān)注!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。