国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

用Swoole快速搭建一個(gè)推送服務(wù)器

Moxmi / 3073人閱讀

摘要:環(huán)境擴(kuò)展需求實(shí)現(xiàn)簡單的廣播支持身份驗(yàn)證源碼廢話少說,上代碼使用實(shí)例就會以守護(hù)進(jìn)程方式運(yùn)行客戶端代碼搭建過程非常方便。實(shí)現(xiàn)的比較簡陋,但是可以滿足一般的需求了。支持身份驗(yàn)證功能,驗(yàn)證不通過會自動(dòng)踢掉。

環(huán)境

php5.6+

swoole擴(kuò)展

需求

實(shí)現(xiàn)簡單的廣播, 支持身份驗(yàn)證

源碼

廢話少說,上代碼.

host = $host;
        $this->port = $port;    
        $this->config = $config;
        $this->init();
    } 

    public function init()
    {
        $this->server = new Server($this->host, $this->port);
        !empty($this->config) && $this->server->set($this->config);

        $this->beforeSendMsgCallback = function() {};
        $this->afterSendMsgCallback = function() {};
        $this->beforeAuthCallback = function() {};
        $this->afterAuthCallback = function() {};
        $this->authenticator = function() {};
        $this->bindEvents();
    }

    public function bindEvents()
    {
        $this->server->on("open", [$this, "onOpen"]);
        $this->server->on("message", [$this, "onMessage"]);
        $this->server->on("close", [$this, "onClose"]);
    }

    public function run()
    {
       $this->server->start(); 
    }
    
    public function onOpen(Server $server, $request)
    {
        call_user_func($this->beforeAuthCallback, $server, $request);
        if (!$this->auth($request)) {
            return;
        }
        $this->customers[] = $request->fd;
        call_user_func($this->afterAuthCallback, $server, $request);
    }

    public function onMessage(Server $server, $frame)
    {
        call_user_func($this->beforeSendMsgCallback, $server, $frame);
        $this->broadcast($frame->fd, $frame->data);
        call_user_func($this->afterSendMsgCallback, $server, $frame);
    }

    public function onClose($ser, $fd)
    {
        $key = array_search($fd, $this->customers);
        unset($this->customers[$key]);
    }

    public function __call($method, $params)
    {
        $class_name = get_class($this->server);
        $class = new ReflectionClass($class_name);

        try {
            $class->getMethod($method);
        } catch (ReflectionException $e) {
            echo "Method $method is not exists
";
            return;
        }

        call_user_func_array([$this->server, $method], $params);
    }

    public function broadcast($fromUser, $messages)
    {
        $users = array_diff($this->customers, [$fromUser]);
        foreach ($users as $user)
        {
            $this->server->push($user, $messages);
        }
    }

    private function auth($request)
    {
        if (($result = call_user_func($this->authenticator, $request)) === false) {
            $this->server->push($request->fd, "auth failed");
            $this->server->close($request->fd);
        }

        return $result;
    }


}
使用實(shí)例
 1,
]);

$server->authenticator = function($request) use ($server) {
    $get = $request->get;
    return empty($get) || ($get["access_token"] == "access_token");
};

$server->afterAuthCallback = function($ser, $request) use ($server) {
    $server->push($request->fd, "auth successful"); 
};

$server->run();
php index.php  #就會以守護(hù)進(jìn)程方式運(yùn)行

客戶端js代碼:

var websocket = new WebSocket("ws://192.168.2.106:9501?access_token=access_token");
websocket.onopen=function(evt) {

};

websocket.onmessage = function(evt) {
    console.log(evt);
};

websocket.onclose = function(evt) {
  console.log(evt);
};

搭建過程非常方便。實(shí)現(xiàn)的比較簡陋,但是可以滿足一般的需求了。支持身份驗(yàn)證功能,驗(yàn)證不通過會自動(dòng)踢掉。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/25591.html

相關(guān)文章

  • Swoole學(xué)習(xí)手記(一)初識Swoole

    摘要:目錄初識創(chuàng)建服務(wù)器上創(chuàng)建服務(wù)器下異步任務(wù)持續(xù)更新中。。。參加工作有一段時(shí)間了,偶爾會聽到,對我這種小白粗略看下文檔都會覺得很牛逼。個(gè)人理解就是解決這樣應(yīng)用場景的。 目錄 初識Swoole 創(chuàng)建服務(wù)器(上) 創(chuàng)建服務(wù)器(下) 異步任務(wù)task 持續(xù)更新中。。。 參加工作有一段時(shí)間了,偶爾會聽到swoole,對我這種PHP小白粗略看下文檔都會覺得很牛逼。由于學(xué)習(xí)成本比較高,自身對網(wǎng)絡(luò)異...

    yeyan1996 評論0 收藏0
  • 基于 Swoole 構(gòu)建的 CTF AWD 比賽環(huán)境搭建與實(shí)踐

    摘要:出題思路本次題目來自于我的一個(gè)外包項(xiàng)目實(shí)踐。回合制比賽以分鐘為一回合。選手在比賽過程中需要盜取到對手的密鑰,以竊聽他方內(nèi)容,并修改己方密鑰以放泄露動(dòng)態(tài)該部分同樣由中心服務(wù)器與完成。 Author: RytiaDate: 20190427Blog: www.zzfly.net本人才學(xué)疏淺,望君不吝賜教 背景 受學(xué)校老師邀請,為學(xué)弟學(xué)妹舉辦分享會介紹 AWD 相關(guān)經(jīng)驗(yàn),本人一時(shí)頭腦風(fēng)暴采用...

    GitCafe 評論0 收藏0
  • php只能做網(wǎng)站?基于swoole+websocket開發(fā)雙向通信應(yīng)

    摘要:那么,是否就無法用來開發(fā)雙向通信的應(yīng)用呢答案是否定的。內(nèi)置通信支持,可以與程序基于進(jìn)行雙向通信。通信協(xié)議于年被定為標(biāo)準(zhǔn),并由補(bǔ)充規(guī)范。前言 眾所周知,PHP用于開發(fā)基于HTTP協(xié)議的網(wǎng)站應(yīng)用非常便捷。而HTTP協(xié)議是一種單向的通信協(xié)議,只能接收客戶端的請求,然后響應(yīng)請求,不能主動(dòng)向客戶端推送信息。因此,一些實(shí)時(shí)性要求比較高的應(yīng)用,如實(shí)時(shí)聊天、直播應(yīng)用、在線網(wǎng)頁游戲等,就不適合采用HTTP協(xié)議...

    番茄西紅柿 評論0 收藏0
  • php只能做網(wǎng)站?基于swoole+websocket開發(fā)雙向通信應(yīng)

    摘要:那么,是否就無法用來開發(fā)雙向通信的應(yīng)用呢答案是否定的。內(nèi)置通信支持,可以與程序基于進(jìn)行雙向通信。通信協(xié)議于年被定為標(biāo)準(zhǔn),并由補(bǔ)充規(guī)范。前言 眾所周知,PHP用于開發(fā)基于HTTP協(xié)議的網(wǎng)站應(yīng)用非常便捷。而HTTP協(xié)議是一種單向的通信協(xié)議,只能接收客戶端的請求,然后響應(yīng)請求,不能主動(dòng)向客戶端推送信息。因此,一些實(shí)時(shí)性要求比較高的應(yīng)用,如實(shí)時(shí)聊天、直播應(yīng)用、在線網(wǎng)頁游戲等,就不適合采用HTTP協(xié)議...

    琛h。 評論0 收藏0
  • 實(shí)戰(zhàn) swoole【聊天室】

    摘要:是一個(gè)請求對象,包含了客戶端發(fā)來的握手請求信息事件函數(shù)中可以調(diào)用向客戶端發(fā)送數(shù)據(jù)或者調(diào)用關(guān)閉連接事件回調(diào)是可選的當(dāng)服務(wù)器收到來自客戶端的數(shù)據(jù)幀時(shí)會回調(diào)此函數(shù)。 前言:了解概念之后就應(yīng)該練練手啦,不然就是巨嬰 有收獲的話請加顆小星星,沒有收獲的話可以 反對 沒有幫助 舉報(bào)三連 代碼倉庫 實(shí)戰(zhàn)swoole【聊天室】 在線體驗(yàn) 準(zhǔn)備工作 需要先看初識swoole【上】,了解基本的服務(wù)端...

    andycall 評論0 收藏0

發(fā)表評論

0條評論

最新活動(dòng)
閱讀需要支付1元查看
<