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

資訊專欄INFORMATION COLUMN

利用Swoole同時更新多臺服務(wù)器代碼

Pines_Cheng / 766人閱讀

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

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

一個簡單的想法:

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

WebSocket Client有幾個角色:

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

Commander: 發(fā)送命令

流程圖:

部分代碼實現(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)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

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

相關(guān)文章

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

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

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

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

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

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

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

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

    張漢慶 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<