2019独角兽企业重金招聘Python工程师标准>>>

封装 xserver.php:  优化将cookie或者session去掉

<?phpif (!class_exists('swoole_http_server')) {if (!class_exists('Swoole\Http\Server')) {echo "請確認是否已安裝Swoole\n";}else{echo "請編輯php.ini中:\n    swoole.use_namespace=off\n";}
}class XServer extends swoole_http_server
{public $_GLOBAL_SESSION     = [];public $route               = ['get'=>[],'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();

转载于:https://my.oschina.net/mickelfeng/blog/1550467

Swoole 实现简单的路由相关推荐

  1. 一步一步重写 CodeIgniter 框架 (2) —— 实现简单的路由功能

    在上一课中,我们实现了简单的根据 URI 执行某个类的某个方法.但是这种映射没有扩展性,对于一个成熟易用的框架肯定是行不通的.那么,我们可以让 框架的用户 通过自定义这种转换来控制,用 CI 的术语就 ...

  2. 简单利用路由黑洞解决DDOS流量攻击

    黑洞路由,便是将所有无关路由吸入其中,使它们有来无回的路由,一般是admin主动建立的路由条目. 提到黑洞路由就要提一下null0接口. null0口是个永不down的口,一般用于管理,详见null0 ...

  3. 一个简单的路由映射,让你的树莓派通过SSH外网可访问

    2019独角兽企业重金招聘Python工程师标准>>> 当想在其他的地方也想控制下树莓派怎么办,其实只需要简单的做个路由映射就OK.完全可以把你的树莓派当做学习linux的平台,抽空 ...

  4. 用swoole实现简单IM聊天室demo

    写在前面:本博文内容取自 http://www.php.cn/course/658.html 课程内容,课程讲的不深,但作为swoole入门教程是肯定够了,感兴趣的同学可以去学习一下 博主最近开始学习 ...

  5. 多人聊天功能代码php,PHP+swoole实现简单多人在线聊天群发效果

    下面本篇文章主要给大家介绍一下PHP+swoole如何实现简单多人在线聊天群发,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 由于本文的能力有限,有好多聊天逻辑的细节没有实现,只实现 ...

  6. 路由器界面html模板,Javascript实现前端简单的路由实例

    前言 前端路由在很多开源的js类库框架中都得到支持,如angularJS,Backbone,Reactjs等等.前端路由和后端路由原理一样,是让所有的交互和展现在一个页面运行以达到减少服务器请求,提高 ...

  7. 简单的路由封装ppp

    路由器的广域网封装ppp配置 实验目的:了解路由的封装匹配理解dce和dte的概念 实验环境:两台路由器相连r1的s0/0接口为DCE r2的s0/0接口为DTE 实验的拓扑图如下 <?xml: ...

  8. eNSP 配置简单静态路由 实现全网可达

    一.进行子网划分 二.配置交换机 分析要求,要vlan2和vlan3互通,则要配置单臂路由 1.创建VLAN SW1************* [sw1]vlan batch 2 to 3 创建vla ...

  9. 路由器的原理与作用 及简单静态路由配置小白看了都秒懂(华为路由器)

    路由器(华为) 一.路由器的原理与作用 1.路由表的形成 2.静态路由表 3.动态路由 二.路由器的优点与缺点 1.优点 2.缺点 三.路由器的功能 1.选路功能 2.网络互联 3.数据处理 4.网络 ...

最新文章

  1. Swift 开源带来的思考
  2. 【转】【VC】VC程序运行时间测试函数
  3. 1041. 考试座位号(15)
  4. bzoj [Scoi2016]美味
  5. OpenGL 学习笔记(3)绘制几何物体
  6. Angular页面里元素class的动态绑定的实现源代码调试
  7. oracle某用户历史sql语句,查看oracle 用户执行的sql语句历史记录
  8. P1131 [ZJOI2007] 时态同步
  9. Sentinel(九)之热点参数限流
  10. Angular 发布首个正式的路线图
  11. Spring AOP(七)之定义切入点
  12. 计算机系统概论第2版答案第七章,计算机系统概论(第七章).ppt
  13. 如何为搭建的网站配置自己的域名 1-2
  14. IDEA中maven项目dependencies报错飘红问题解决
  15. pico的学习之路(四)——HC-SR501人体感应模块(树莓派pico实现)
  16. Aspose.Cells 单元格格式设置 如设置为数字
  17. 关于泛微E9 OA系统手机端无法使用的抢救过程
  18. 心音与心电信号分析之一--6.26--心音信号概述
  19. javaFX学习之Menu下创建子菜单及菜单项的例子
  20. 关于云计算和raid技术的对比

热门文章

  1. android手机连接无线路由器上网设置,怎样用手机设置无线路由器上网?
  2. python 求系数矩阵,关于numpy:python-如何在数据矩阵中使用nans计算相关矩阵
  3. android给后台传递json,将服务中的JSON数据发送到Android中的UI
  4. 将服务器文件加载至hive表中,Hive入门到剖析(四)
  5. 计算机二级办公软件aoa 百度云,计算机二级办公 考生注意事项(二级AOA)
  6. 手工卸载oracle,升级和卸载Oracle数据库软件的命令整理
  7. ip 地址 192.168.1.255 代表( )。_ip地址基础入门知识
  8. linux下代码写错了怎么更改_AWS全面上市开源Linux发行版,专为容器操作系统设计...
  9. java中 d_Java 中的 syncronized 你真的用对了吗
  10. linux的make提示错误46,Linux 2.6.21编译发生错误