摘要:一個小型網(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
摘要:的部分是基于以及協(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ù)。...
摘要:負(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、事件...
摘要:的異步并行高性能網(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...
摘要:和服務(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...
閱讀 3717·2021-10-11 10:59
閱讀 1301·2019-08-30 15:44
閱讀 3479·2019-08-29 16:39
閱讀 2888·2019-08-29 16:29
閱讀 1800·2019-08-29 15:24
閱讀 808·2019-08-29 15:05
閱讀 1264·2019-08-29 12:34
閱讀 2302·2019-08-29 12:19