亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

利用Swoole同時(shí)更新多臺(tái)服務(wù)器代碼

Pines_Cheng / 818人閱讀

摘要:一個(gè)小型網(wǎng)站的架構(gòu),前面一臺(tái)負(fù)載均衡后面幾臺(tái)服務(wù)器更新代碼成了難題一個(gè)一個(gè)傳不現(xiàn)實(shí)而且容易漏傳,導(dǎo)致兩個(gè)服務(wù)器的代碼都不一致一個(gè)簡(jiǎn)單的想法利用發(fā)送更新指令接收到更新指令運(yùn)行更新代碼有幾個(gè)角色接收命令不能發(fā)送命令發(fā)送命令流程圖部分代碼實(shí)現(xiàn)

一個(gè)小型網(wǎng)站的架構(gòu), 前面一臺(tái)負(fù)載均衡, 后面幾臺(tái)web服務(wù)器. 更新代碼成了難題, 一個(gè)一個(gè)FTP傳不現(xiàn)實(shí), 而且容易漏傳,導(dǎo)致兩個(gè)WEB服務(wù)器的代碼都不一致.

一個(gè)簡(jiǎn)單的想法:

利用Websocket Server發(fā)送更新指令, Websocket Client 接收到更新指令, 運(yùn)行git pull更新代碼.

WebSocket Client有幾個(gè)角色:

Solider: 接收命令, 不能發(fā)送命令

Commander: 發(fā)送命令

流程圖:

部分代碼實(shí)現(xiàn):

table = new Table();
        $this->server = new WebSocketServer($config["host"], $config["port"]);
        $this->server->set($config["configuration"]);
        $this->addEventListener();
    }

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

    private function onOpen($server, $request)
    {
        if ($request->get["role"] == "commander") {
            $this->table->commander = $request->fd;
        } else {
            $soliders = $this->table->soliders;

            $soliders[] = $request->fd;

            $this->table->soliders = $soliders;
        }
    }

    private function onMessage($server, $frame)
    {
        if ($frame->fd == $this->table->commander) {
            $command = $frame->data;

            foreach ($this->table->soliders as $solider) {
                $this->server->push($solider, $command);
            }
        } else {
            $this->server->push($frame->fd, "You don not have any right to send message");
        }
    }

    private function onClose($server, $fd)
    {
        $soliders = $this->table->soliders;

        if (in_array($fd, $soliders)) {
            unset($soliders[array_search($fd, $soliders)]);
        }
    }

    public function run()
    {
        $this->server->start();
    }
}

$server = new Server([
    "host" => "0.0.0.0",
    "port" => 8015,
    "configuration" => [
        "daemonize" => 1,
    ]
]);

$server->run();
 $this->protocol, "host" => $this->host, "port" => $this->port, "query" => $this->query) = parse_url($url);

        if ($this->protocol == "wss") {
            echo "unsupport protocol";
        }

        $this->client = new WebSocketClient($this->host, $this->port);
    }

    public function start(Callable $callback)
    {
        $this->client->upgrade("/?" . $this->query, $callback);
    }

    public function __set($field, $value)
    {
        if (in_array($field, $this->allow_events) && is_callable($value)) {
            $this->client->on(strtolower(substr($field, 2)), $value);
        } else {
            echo "Unsupport Event";
        }        
    }
}

onMessage = function($client, $frame) {
    list("command" => $command, "params" => $params) = parseCommand($frame->data);

    echo $command;

    switch ($command) {
        case "update":
            updateCommand();
            break;
    }
};

$ws->onClose = function($client) {

};

$ws->start(function ($client) {
    
});

SwooleProcess::daemon();



    
    Document


    

    

完整代碼:

https://gitee.com/shuizhuyu/P...

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/28869.html

相關(guān)文章

  • Swoole源碼研究】淺析swoole中server的實(shí)現(xiàn)

    摘要:的部分是基于以及協(xié)議的。例如父進(jìn)程向中寫(xiě)入子進(jìn)程從中讀取子進(jìn)程向中寫(xiě)入父進(jìn)程從中讀取。默認(rèn)使用對(duì)進(jìn)程進(jìn)行分配交給對(duì)應(yīng)的線程進(jìn)行監(jiān)聽(tīng)線程收到某個(gè)進(jìn)程的數(shù)據(jù)后會(huì)進(jìn)行處理值得注意的是這個(gè)線程可能并不是發(fā)送請(qǐng)求的那個(gè)線程。 作者:施洪寶 一. 基礎(chǔ)知識(shí) 1.1 swoole swoole是面向生產(chǎn)環(huán)境的php異步網(wǎng)絡(luò)通信引擎, php開(kāi)發(fā)人員可以利用swoole開(kāi)發(fā)出高性能的server服務(wù)。...

    rainyang 評(píng)論0 收藏0
  • 了解swoole運(yùn)行模式,加速laravel應(yīng)用

    摘要:負(fù)責(zé)解釋執(zhí)行文件生成響應(yīng),最終返回給,展現(xiàn)至前端。相比于傳統(tǒng)架構(gòu),進(jìn)程模型最大的特點(diǎn)在于其多線程模式處理網(wǎng)絡(luò)請(qǐng)求,使得其能輕松應(yīng)對(duì)大量連接。這要求開(kāi)發(fā)人員對(duì)于多進(jìn)程的運(yùn)行模式有更清晰的認(rèn)識(shí)更容易內(nèi)存泄露。 一、SwooleSwoole號(hào)稱重新定義了PHP,它是一個(gè)PHP擴(kuò)展,使得PHP可以使用異步的方式執(zhí)行,就像node一樣,而且還能使用socket,為PHP提供了一系列異步IO、事件...

    時(shí)飛 評(píng)論0 收藏0
  • swoole 服務(wù)端120行代碼構(gòu)建一個(gè)websocket 聊天室.

    摘要:的異步并行高性能網(wǎng)絡(luò)通信引擎,使用純語(yǔ)言編寫(xiě),提供了語(yǔ)言的異步多線程服務(wù)器,異步網(wǎng)絡(luò)客戶端,異步,異步,數(shù)據(jù)庫(kù)連接池,,消息隊(duì)列,毫秒定時(shí)器,異步文件讀寫(xiě),異步查詢。內(nèi)置了服務(wù)器端客戶端服務(wù)器端。 swoole :http://www.swoole.com/PHP的異步、并行、高性能網(wǎng)絡(luò)通信引擎,使用純C語(yǔ)言編寫(xiě),提供了PHP語(yǔ)言的異步多線程服務(wù)器,異步TCP/UDP網(wǎng)絡(luò)客戶端,異步M...

    韓冰 評(píng)論0 收藏0
  • Swoft 源碼剖析 - Swoole和Swoft的那些事 (Http/Rpc服務(wù)篇)

    摘要:和服務(wù)關(guān)系最密切的進(jìn)程是中的進(jìn)程組,絕大部分業(yè)務(wù)處理都在該進(jìn)程中進(jìn)行。隨后觸發(fā)一個(gè)事件各組件通過(guò)該事件進(jìn)行配置文件加載路由注冊(cè)。事件每個(gè)請(qǐng)求到來(lái)時(shí)僅僅會(huì)觸發(fā)事件。服務(wù)器生命周期和服務(wù)基本一致,詳情參考源碼剖析功能實(shí)現(xiàn) 作者:bromine鏈接:https://www.jianshu.com/p/4c0...來(lái)源:簡(jiǎn)書(shū)著作權(quán)歸作者所有,本文已獲得作者授權(quán)轉(zhuǎn)載,并對(duì)原文進(jìn)行了重新的排版。S...

    張漢慶 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

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