摘要:封裝請確認是否已安裝請編輯中通過本函數綁定路由綁定所有路由路由路由路由路由路由路由使用
封裝 xserver.php:
[],"post"=>[],"put"=>[],"head"=>[],"delete"=>[]]; /** * start * @param string $action * @param closure $callback */ public function start() { parent::on("request", function($req, $res){ $do = $this->initRequest($req, $res, $this); $req = $do["req"]; $res = $do["res"]; if( isset($this->route[strtolower($req->server["request_method"])][$req->server["request_uri"]]) ) return call_user_func_array( $this->route[strtolower($req->server["request_method"])][$req->server["request_uri"]], [$req, $res, $do["get"], $do["post"], $do["server"], $do["session"], $this->_GLOBAL_SESSION, $ip ] ); else return call_user_func_array( $this->route["error"]["404"], [$req, $res, $do["get"], $do["post"], $do["server"], $do["session"], $this->_GLOBAL_SESSION, $ip ] ); }); parent::start(); } /** * all,get,post,put,head,delete通過本函數綁定路由 * @param string $method * @param string $path * @param closure $callback */ public function path($method, $path, $callback){ $this->route[$method][$path] = $callback; } /** * 綁定所有路由 * @param string $path * @param closure $callback */ public function all($path, $callback){ foreach (["get","post","head","put","delete"] as $method) $this->path($method, $path, $callback); } /** * GET路由 * @param string $path * @param closure $callback */ public function get($path, $callback){ $this->path("get", $path, $callback); } /** * POST路由 * @param string $path * @param closure $callback */ public function post($path, $callback){ $this->path("post", $path, $callback); } /** * PUT路由 * @param string $path * @param closure $callback */ public function put($path, $callback){ $this->path("put", $path, $callback); } /** * HEAD路由 * @param string $path * @param closure $callback */ public function head($path, $callback){ $this->path("head", $path, $callback); } /** * DELETE路由 * @param string $path * @param closure $callback */ public function delete($path, $callback){ $this->path("delete", $path, $callback); } /** * ERROR路由 * @param string $path * @param closure $callback */ public function error($path, $callback){ $this->path("error", $path, $callback); } public function initRequest($req, $res) { if (!isset($req->server)) $req->server = []; if (!isset($req->get)) $req->get = []; if (!isset($req->post)) $req->post = []; if (isset($req->server["accept-encoding"]) && stripos($req->server["accept-encoding"], "gzip")) { $res->gzip(5); } if (!isset($req->cookie) || !isset($req->cookie["sid"]) || !$req->cookie["sid"]) { $req->cookie["sid"] = md5(password_hash(time() . mt_rand(100000, 999999), 1)); @$res->cookie("sid", $req->cookie["sid"], time() + 60 * 60 * 24 * 365 * 10, "/", "", false, true); } $_SESS_ID = $req->cookie["sid"]; if (!isset($this->_GLOBAL_SESSION[$_SESS_ID]) || !is_array($this->_GLOBAL_SESSION[$_SESS_ID])) { $this->_GLOBAL_SESSION[$_SESS_ID] = []; } $_SESSION = &$this->_GLOBAL_SESSION[$_SESS_ID]; if (isset($req->header)) { isset($req->header["if-none-match"]) ? $req->server["if-none-match"] = $req->header["if-none-match"] : false; isset($req->header["if-modified-since"]) ? $req->server["if-modified-since"] = $req->header["if-modified-since"] : false; isset($req->header["connection"]) ? $req->server["connection"] = $req->header["connection"] : false; isset($req->header["accept"]) ? $req->server["accept"] = $req->header["accept"] : false; isset($req->header["accept-encoding"]) ? $req->server["accept-encoding"] = $req->header["accept-encoding"] : false; isset($req->header["accept-language"]) ? $req->server["accept-language"] = $req->header["accept-language"] : false; isset($req->header["upgrade-insecure-requests"]) ? $req->server["upgrade-insecure-requests"] = $req->header["upgrade-insecure-requests"] : false; isset($req->header["cache-control"]) ? $req->server["cache-control"] = $req->header["cache-control"] : false; isset($req->header["pragma"]) ? $req->server["pragma"] = $req->header["pragma"] : false; isset($req->header["referer"]) ? $req->server["referer"] = $req->header["referer"] : false; isset($req->header["x-forwarded-for"]) ? $req->server["remote_addr"] = $req->header["x-forwarded-for"] : false; stripos($req->server["remote_addr"], ",") ? $req->server["remote_addr"] = stripos($req->server["remote_addr"],",")[0] : false; } return ["req"=>$req, "res"=>$res, "session"=>$_SESSION, "server"=>$req->server, "get"=>$req->get, "post"=>$req->post]; } } class BaseException extends Exception { var $data = []; function __construct($message, $code, $data = []) { if ($data == []) { $data = new stdClass(); } $this->data = $data; parent::__construct($message, $code); return $this; } function getData() { return $this->data; } } class QueueException extends BaseException {} class ApiException extends BaseException {}
使用: app.php
define("APP_PATH", dirname(__FILE__) . "/"); require_once APP_PATH."xserver.php"; $server = new XServer("0.0.0.0", 3155); $server->get("/test/", function ($req, $res, $_X_GET, $_X_POST, $_X_SERVER, $_X_SESSION, $_X_GLOBAL, $ip) use ($server) { try { $res->end("TEST get"); return; } catch (ApiException $e) { } }); $server->post("/test/", function ($req, $res, $_X_GET, $_X_POST, $_X_SERVER, $_X_SESSION, $_X_GLOBAL, $ip) use ($server) { try { $res->end("TEST post"); return; } catch (ApiException $e) { } }); $server->all("/test/all/", function ($req, $res, $_X_GET, $_X_POST, $_X_SERVER, $_X_SESSION, $_X_GLOBAL, $ip) use ($server) { try { $res->end("TEST all"); return; } catch (ApiException $e) { } }); $server->start();
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/30408.html
摘要:官網源碼解讀號外號外歡迎大家我們開發組定了一個就線下聚一次的小目標里面的框架算是非常重的了這里的重先不具體到性能層面主要是框架的設計思想和框架集成的服務讓框架可以既可以快速解決很多問題又可以輕松擴展中的框架有在應該無出其右了這次解讀的源碼 官網: https://www.swoft.org/源碼解讀: http://naotu.baidu.com/file/8... 號外號外, 歡迎大...
摘要:初始化發送消息判斷用戶是否登錄如果沒有登錄拒絕連接斷開清除信息處理協議主要是方法,輪訓獲取消息。 這個列子主要討論Tcp,WebSocket和http之間的通訊。長連接和長連接通訊,長連接和短連接通訊。其他協議同理可得 Tcp: 代表硬件設備 WebSocket: 代表客戶端 http: 代表網頁 本列子是基于one框架 (https://github.com/lizhicha...
摘要:于是打算做一個擁有非常好用的路由和又非常簡單的框架。但也有一些自己的特色,例如支持自動化緩存自動化讀寫刷新保持與數據庫同步,對外使用無感知。例如協議服務器地址遠程的類不設置默認為當前類名其中類在框架里。 背景 在用過laravel框架,發現它的路由和數據庫ORM確實非常好用,但是整體確實有點慢,執行到控制器大于需要耗時60ms左右。于是打算做一個擁有非常好用的路由和orm又非常簡單的框...
摘要:介紹是基于開發的協程開發框架,擁有常駐內存協程異步非阻塞等優點。宇潤我在年開發并發布了第一個框架,一直維護使用至今,非常穩定,并且有文檔。于是我走上了開發的不歸路 showImg(https://segmentfault.com/img/bVbcxQH?w=340&h=160); 介紹 IMI 是基于 Swoole 開發的協程 PHP 開發框架,擁有常駐內存、協程異步非阻塞IO等優點。...
摘要:和服務關系最密切的進程是中的進程組,絕大部分業務處理都在該進程中進行。隨后觸發一個事件各組件通過該事件進行配置文件加載路由注冊。事件每個請求到來時僅僅會觸發事件。服務器生命周期和服務基本一致,詳情參考源碼剖析功能實現 作者:bromine鏈接:https://www.jianshu.com/p/4c0...來源:簡書著作權歸作者所有,本文已獲得作者授權轉載,并對原文進行了重新的排版。S...
閱讀 1864·2021-11-25 09:43
閱讀 2146·2021-11-19 09:40
閱讀 3422·2021-11-18 13:12
閱讀 1739·2021-09-29 09:35
閱讀 661·2021-08-24 10:00
閱讀 2505·2019-08-30 15:55
閱讀 1710·2019-08-30 12:56
閱讀 1815·2019-08-28 17:59