摘要:隊(duì)列長(zhǎng)度,拿到客戶端用戶請(qǐng)先登錄用戶身份無(wú)效請(qǐng)重新登錄非法操作發(fā)送數(shù)據(jù)失敗
TP是最新版本的;
大概實(shí)現(xiàn)的有,用戶注冊(cè),注冊(cè)完畢之后跳轉(zhuǎn)到登錄頁(yè)面;
登錄之后生成身份令牌(token)存到Redis;
在聊天界面沒(méi)有任何ajax請(qǐng)求,只要在握手的時(shí)候有一個(gè)http請(qǐng)求,實(shí)在是搞不懂一些人,在聊天界面發(fā)布消息用ajax去發(fā)布,
做了一些處理,一個(gè)瀏覽器里面只能用一個(gè)賬號(hào),所以測(cè)試的時(shí)候必須用兩個(gè)瀏覽器
之后跳轉(zhuǎn)到聊天界面,然后建立WebSocket握手,在握手的同時(shí)攜帶toekn,以及對(duì)方的ID(朋友的ID) ;
后臺(tái)服務(wù)器在OnOpen的時(shí)候做一系列的操作,例如(檢測(cè)token,檢測(cè)朋友的ID,將自己的ID和fd更新到數(shù)據(jù)表,fd綁定uid等..);
這些檢測(cè)都通過(guò)之后獲取聊天記錄,為了效率是拉取和朋友的15條聊天記錄;
在OnMessage中獲取了發(fā)送的數(shù)據(jù)!
在發(fā)送之后檢測(cè)對(duì)方是否在線,如果不在線就不用發(fā)送給對(duì)方,如果對(duì)方在線就將信息push給他!
心跳檢測(cè): 每5秒檢測(cè)一次,如果在100秒沒(méi)有任何操作將斷開連接,斷開連接的同時(shí)將數(shù)據(jù)庫(kù)中的fd清空!
代碼很簡(jiǎn)單,,,但是有個(gè)別的問(wèn)題沒(méi)有解決,比如在線統(tǒng)計(jì)(connections)
下面貼上Socket_Server.php的代碼 其他的都是沒(méi)有什么邏輯的代碼!
完整的等之后寫完了再發(fā)出來(lái)吧,大家共同進(jìn)步!
4, // 設(shè)置啟動(dòng)的Worker進(jìn)程數(shù) "daemonize" => false, //守護(hù)進(jìn)程化。 "backlog" => 128, //Listen隊(duì)列長(zhǎng)度, "dispatch_mode" => 2, "heartbeat_check_interval" => 5, "heartbeat_idle_time" => 100, ]; public function onOpen(swoole_websocket_server $server, swoole_http_request $req) { $fd = $req->fd; $token = $req->get["token"] ?? ""; //拿到客戶端用戶ID if (!$token) { $server->push($fd, Tool::showAjax(["status" => 3, "message" => "請(qǐng)先登錄!"])); $server->close($fd); return; } $userData = Cache::get($token); if (!$userData) { $server->push($fd, Tool::showAjax(["status" => 2, "message" => "用戶身份無(wú)效,請(qǐng)重新登錄!"])); $server->close($fd); return; } self::$uid = $req->get["friendId"]; if (self::$uid == $userData["uid"]) { $server->push($fd, Tool::showAjax(["status" => 2, "message" => "非法操作!"])); $server->close($fd); } $server->bind($fd, $userData["uid"]); $messages = Message::getMessage($userData["uid"]); (new UserModel())->where("id", $userData["uid"])->update(["fd" => $req->fd]); $arr = $messages->toArray(); sort($arr); $server->push($fd, Tool::showAjax(["status" => 1, "message" => "success", "data" => $arr])); } public function onMessage(swoole_websocket_server $server, swoole_websocket_frame $frame) { $message = $frame->data; if (empty($message)) return; $data = [ "uid1" => $server->getClientInfo($frame->fd)["uid"], "uid2" => self::$uid, "message" => htmlspecialchars($message), "send_uid" => $server->getClientInfo($frame->fd)["uid"] ]; try { (new Message())->save($data); } catch (Exception $e) { $server->push($frame->fd, Tool::showAjax(["status" => "2", "message" => "發(fā)送數(shù)據(jù)失敗!"])); } $messages = Message::getMessage($server->getClientInfo($frame->fd)["uid"]); $friendData = UserModel::geUserDataFd(self::$uid); $arr = $messages->toArray(); sort($arr); if ($friendData) { $server->push($friendData, Tool::showAjax(["status" => 1, "message" => "success", "data" => $arr])); } $server->push($frame->fd, Tool::showAjax(["status" => 1, "message" => "success", "data" => $arr])); } function onClose(swoole_server $server, int $fd, int $reactorId) { (new UserModel())->where("fd", $fd)->update(["fd" => ""]); } }
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/95895.html
摘要:隊(duì)列長(zhǎng)度,拿到客戶端用戶請(qǐng)先登錄用戶身份無(wú)效請(qǐng)重新登錄非法操作發(fā)送數(shù)據(jù)失敗 showImg(https://segmentfault.com/img/bVbc34G?w=1618&h=768); TP是最新版本的;大概實(shí)現(xiàn)的有,用戶注冊(cè),注冊(cè)完畢之后跳轉(zhuǎn)到登錄頁(yè)面;登錄之后生成身份令牌(token)存到Redis;在聊天界面沒(méi)有任何ajax請(qǐng)求,只要在握手的時(shí)候有一個(gè)http請(qǐng)求,實(shí)...
摘要:是一個(gè)請(qǐng)求對(duì)象,包含了客戶端發(fā)來(lái)的握手請(qǐng)求信息事件函數(shù)中可以調(diào)用向客戶端發(fā)送數(shù)據(jù)或者調(diào)用關(guān)閉連接事件回調(diào)是可選的當(dāng)服務(wù)器收到來(lái)自客戶端的數(shù)據(jù)幀時(shí)會(huì)回調(diào)此函數(shù)。 前言:了解概念之后就應(yīng)該練練手啦,不然就是巨嬰 有收獲的話請(qǐng)加顆小星星,沒(méi)有收獲的話可以 反對(duì) 沒(méi)有幫助 舉報(bào)三連 代碼倉(cāng)庫(kù) 實(shí)戰(zhàn)swoole【聊天室】 在線體驗(yàn) 準(zhǔn)備工作 需要先看初識(shí)swoole【上】,了解基本的服務(wù)端...
摘要:今天來(lái)做一個(gè)簡(jiǎn)單的聊天室支持換房間支持私信的寫的代碼有點(diǎn)渣里面有很多不是很好的地方畢竟我只是一個(gè)野生程序猿環(huán)境地址樣子差不多是這個(gè)樣子的我不想把代碼發(fā)到我的服務(wù)器上因?yàn)檫@個(gè)項(xiàng)目太小了很垃圾而且怕被攻擊這里有錄的一個(gè)演示視頻沒(méi)有廣告的你們可以 今天來(lái)做一個(gè)簡(jiǎn)單的聊天室,支持換房間,支持私信的. 寫的代碼有點(diǎn)渣,里面有很多不是很好的地方.畢竟我只是一個(gè)野生程序猿. 環(huán)境: php7.0...
閱讀 3486·2023-04-26 02:48
閱讀 1475·2021-10-11 10:57
閱讀 2502·2021-09-23 11:35
閱讀 1210·2021-09-06 15:02
閱讀 3310·2019-08-30 15:54
閱讀 1626·2019-08-30 15:44
閱讀 893·2019-08-30 15:44
閱讀 1000·2019-08-30 12:52