介绍 Swoole HTTP的应用

介绍 Swoole HTTP的应用

推荐(免费):Swoole

概述

我们都知道HTTP是一种协议,允许WEB服务器和浏览器通过互联网进行发送和接受数据。

想对HTTP进行详细的了解,可以找下其他文章,这篇文章不多做介绍。

我们在网上能看到的界面,图片,动画,音频,视频等,都有依赖这个协议的。

在做WEB系统的时候,都使用过IIS,Apache,Nginx吧,我们利用Swoole也可以简单的实现一个WEB服务器。

主要使用了HTTP的两个大对象:Request请求对象,Response响应对象。

请求,包括GET,POST,COOKIE,Header等。

响应,包括状态,响应体,扩展,发送文件等。

不多说,先分享两个程序:

一,实现一个基础的Demo:“你好,Swoole。”

二,实现一个简单的路由控制

本地版本:  

PHP 7.2.6

旋风4.3.1

AppMall应用商店 AppMall应用商店

AI应用商店,提供即时交付、按需付费的人工智能应用服务

AppMall应用商店 56 查看详情 AppMall应用商店

代码

一,Demo:“你好,Swoole。”   

示例效果:    

介绍 Swoole HTTP的应用     

备注:IP地址是我的虚拟机。   

示例代码:   

serv = new swoole_http_server("0.0.0.0", 9502);        $this->serv->set([ 'worker_num' => 2, //开启2个worker进程 'max_request' => 4, //每个worker进程 max_request设置为4次 'daemonize' => false, //守护进程(true/false) ]);        $this->serv->on('Start', [$this, 'onStart']);        $this->serv->on('WorkerStart', [$this, 'onWorkStart']);        $this->serv->on('ManagerStart', [$this, 'onManagerStart']);        $this->serv->on("Request", [$this, 'onRequest']);        $this->serv->start(); } public function onStart($serv) {        echo "#### onStart ####".PHP_EOL;        echo "SWOOLE ".SWOOLE_VERSION . " 服务已启动".PHP_EOL;        echo "master_pid: {$serv->master_pid}".PHP_EOL;        echo "manager_pid: {$serv->manager_pid}".PHP_EOL;        echo "########".PHP_EOL.PHP_EOL; } public function onManagerStart($serv) {        echo "#### onManagerStart ####".PHP_EOL.PHP_EOL; } public function onWorkStart($serv, $worker_id) {        echo "#### onWorkStart ####".PHP_EOL.PHP_EOL; } public function onRequest($request, $response) {        $response->header("Content-Type", "text/html; charset=utf-8");        $html = "

你好 Swoole.

"; $response->end($html); }}$server = new Server();

二,路由控制     

示例效果:    

介绍 Swoole HTTP的应用

目录结构:

├─ swoole_http  -- 代码根目录│ ├─ server.php│ ├─ controller│ ├── Index.php│ ├── Login.php

示例代码:     

server.php     

serv = new swoole_http_server("0.0.0.0", 9501);        $this->serv->set([ 'worker_num' => 2, //开启2个worker进程 'max_request' => 4, //每个worker进程 max_request设置为4次 'document_root' => '', 'enable_static_handler' => true, 'daemonize' => false, //守护进程(true/false) ]);        $this->serv->on('Start', [$this, 'onStart']);        $this->serv->on('WorkerStart', [$this, 'onWorkStart']);        $this->serv->on('ManagerStart', [$this, 'onManagerStart']);        $this->serv->on("Request", [$this, 'onRequest']);        $this->serv->start(); } public function onStart($serv) {        echo "#### onStart ####".PHP_EOL;        swoole_set_process_name('swoole_process_server_master');        echo "SWOOLE ".SWOOLE_VERSION . " 服务已启动".PHP_EOL;        echo "master_pid: {$serv->master_pid}".PHP_EOL;        echo "manager_pid: {$serv->manager_pid}".PHP_EOL;        echo "########".PHP_EOL.PHP_EOL; } public function onManagerStart($serv) {        echo "#### onManagerStart ####".PHP_EOL.PHP_EOL;        swoole_set_process_name('swoole_process_server_manager'); } public function onWorkStart($serv, $worker_id) {        echo "#### onWorkStart ####".PHP_EOL.PHP_EOL;        swoole_set_process_name('swoole_process_server_worker');        spl_autoload_register(function ($className) {            $classPath = __DIR__ . "/controller/" . $className . ".php"; if (is_file($classPath)) { require "{$classPath}"; return; } }); } public function onRequest($request, $response) {        $response->header("Server", "SwooleServer");        $response->header("Content-Type", "text/html; charset=utf-8");        $server = $request->server;        $path_info    = $server['path_info'];        $request_uri  = $server['request_uri']; if ($path_info == '/favicon.ico' || $request_uri == '/favicon.ico') { return $response->end(); }        $controller = 'Index';        $method     = 'home'; if ($path_info != '/') {            $path_info = explode('/',$path_info); if (!is_array($path_info)) {                $response->status(404);                $response->end('URL不存在'); } if ($path_info[1] == 'favicon.ico') { return; }            $count_path_info = count($path_info); if ($count_path_info > 4) {                $response->status(404);                $response->end('URL不存在'); }            $controller = (isset($path_info[1]) && !empty($path_info[1])) ? $path_info[1] : $controller;            $method = (isset($path_info[2]) && !empty($path_info[2])) ? $path_info[2] : $method; }        $result = "class 不存在"; if (class_exists($controller)) {            $class = new $controller();            $result = "method 不存在"; if (method_exists($controller, $method)) {                $result = $class->$method($request); } }        $response->end($result); }}$server = new Server();

Index.php

get) ? $request->get : []; //@TODO 业务代码        $result = "

你好,Swoole。

"; $result.= "GET参数:".json_encode($get); return $result; }}

Login.php

post) ? $request->post : []; //@TODO 业务代码 return "

登录成功。

"; }}

小结

一,Swoole可以替代Nginx吗?

暂时不能,通过Swoole越来越强大,以后说不准。

官方建议Swoole与Nginx结合使用。

Http Server对Http协议的支持并不完整,建议仅作为应用服务器。并且在前端增加Nginx作为代理。

根据自己的Nginx配置文件,可以自行调整。

例如:可以添加一个配置文件

enable-swoole-php.conf

location ~ [^/].php(/|$){    proxy_http_version 1.1;    proxy_set_header Connection "keep-alive";    proxy_set_header X-Real-IP $remote_addr;    proxy_pass http://127.0.0.1:9501;}

我们都习惯于将虚拟域名的配置文件放在vhost文件夹中。

例如,虚拟域名的配置文件为:local.swoole.com.conf,可以选择加载enable-php.conf,也可以选择加载enable-swoole-php.conf。

配置文件供参考:

server {        listen 80; #listen [::]:80;        server_name local.swoole.com ;        index index.html index.htm index.php default.html default.htm default.php;        root  /home/wwwroot/project/swoole; #include rewrite/none.conf; #error_page   404   /404.html; #include enable-php.conf;        include enable-swoole-php.conf;        location ~ .*.(gif|jpg|jpeg|png|bmp|swf)$ {            expires      30d; }        location ~ .*.(js|css)?$ {            expires      12h; }        location ~ /.well-known {            allow all; }        location ~ /. {            deny all; }        access_log  /home/wwwlogs/local.swoole.com.log; }

当前,我们直接编辑server段的代码也是可以的。

二,修改了controller文件夹中的业务代码,每次都是重启服务才生效吗?

不是,每次重启服务可能会影响到正常用户使用的,正常处理的请求会被强制关闭。

在本地运行路由控制的代码时,试试这个命令:

ps aux | grep swoole_process_server_master | awk '{print $2}' | xargs kill -USR1

给master进程发送一个USR1的信号,当Swoole Server接收到该信号后,就会让所有worker在处理完当前的请求后,进行重启。

如果查看所有的进程,试试这个命令:

ps -ef | grep 'swoole_process_server'| grep -v 'grep'

扩展

可以试着上传文件,做一个小的FTP服务器。

可以学习Swoole开源框架:EasySwoole,Swoft,One。

可以将Swoole整合到当前正在使用的PHP框架中。

更多相关精品文章敬请关注swoole框架栏目!    

以上就是介绍 Swoole HTTP的应用的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/349819.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月5日 21:41:10
下一篇 2025年11月5日 21:47:27

相关推荐

  • axios怎样基于Promise的HTTP请求客户端

    这次给大家带来axios怎样基于promise的http请求客户端,axios基于promise的http请求客户端的注意事项有哪些,下面就是实战案例,一起来看一下。 axios 基于 Promise 的 HTTP 请求客户端,可同时在浏览器和 node.js 中使用 功能特性 在浏览器中发送XML…

    好文分享 2025年12月24日
    000
  • 404错误的原因和解决方法的深入研究

    探究HTTP状态码404的原因和解决途径 引言:在浏览网页的过程中,我们经常会遇到HTTP状态码404。这个状态码表示服务器未能找到请求的资源。在本文中,我们将探究HTTP状态码404的原因,并分享一些解决途径。 一、HTTP状态码404的原因:1.1 资源不存在:最常见的原因就是请求的资源在服务器…

    2025年12月22日
    000
  • HTTP502错误码解析及解决方法

    了解HTTP502错误码:为什么它会出现,如何解决? 引言:在使用互联网的日常生活中,我们经常会遇到各种网络错误,例如404 Not Found、403 Forbidden等。其中,HTTP502错误码也是常见的一种错误。本文将介绍HTTP502错误码出现的原因以及解决方法,帮助读者更好地理解和解决…

    2025年12月22日
    000
  • HTTP525状态码解析:详细解读其意义和使用场景

    HTTP状态码是用来表示客户端请求与服务器响应之间的状态的一种规范化的方式。其中,HTTP 525状态码是指SSL连接失败。本文将详细解析HTTP 525状态码的意义和使用场景。 首先,HTTP 525状态码表示SSL连接失败。SSL(Secure Sockets Layer)是一种用于保护网络通信…

    2025年12月22日
    000
  • HTTP状态码405解析:了解请求方法不被允许的原因

    HTTP状态码405解析:了解请求方法不被允许的原因 HTTP(Hypertext Transfer Protocol)是一种用于传输超文本的协议,它定义了客户端和服务器之间的通信规则。在HTTP协议中,客户端发送请求给服务器,服务器根据请求做出相应的响应。 HTTP状态码用于标识请求的处理结果,其…

    2025年12月22日
    000
  • HTTP请求超时时返回的状态码是什么?

    如何判断HTTP请求超时的状态码是什么? 在进行网络通信过程中,我们常常会遇到网络请求超时的情况。当我们发出一个HTTP请求后,如果在设定的时间内没有收到服务器的响应,就会导致请求超时。那么如何判断HTTP请求超时的状态码是什么呢?本文将介绍一些常见的状态码以及如何判断请求超时的方法。 首先,我们需…

    2025年12月22日
    000
  • 探究HTTP状态码403:访问被拒绝的原因分析

    HTTP状态码403详解:为什么会出现禁止访问的情况? 引言:在使用互联网浏览器浏览网页时,有时会遇到HTTP状态码403,“禁止访问”的错误提示。这意味着用户无权限访问所请求的资源。本文将详细解释403错误的原因以及常见的解决方法。 一、HTTP协议与状态码:HTTP(Hypertext Tran…

    2025年12月22日
    000
  • 学习HTTP状态码301:理解网页重定向的重要性及实现方法

    了解HTTP状态码301:网页重定向的意义与实现方式 引言:在我们日常浏览网页时,有时会遇到网页找不到或被移动的情况。这种情况下,我们常常会看到网页跳转到一个新的页面。这种跳转就是通过HTTP状态码301来实现的。本文将介绍HTTP状态码301的意义以及实现方式。 节1:什么是HTTP状态码301?…

    2025年12月22日
    000
  • HTTP状态码405的解释和用途

    了解HTTP状态码405的含义及作用 HTTP(HyperText Transfer Protocol)是一种用于在网络上传输超文本的协议。在使用HTTP进行通信时,客户端(如浏览器)会向服务器发送请求,而服务器则会给予相应的回应。HTTP状态码是服务器通过回应的形式告诉客户端请求的处理情况的一种信…

    2025年12月22日
    000
  • 常见的HTTP重定向状态码及其应用场景

    HTTP状态码是用来表示HTTP请求和响应的结果的一种标准化的方式。在HTTP协议中,重定向是一种常见的请求处理方式。通过重定向,服务器可以将请求的URL指向新的位置,从而实现对资源的重新定位。本文将详细介绍常见的重定向类型及其应用场景。 301 Moved Permanently (永久重定向)当…

    2025年12月22日
    000
  • 理解网页重定向的常见应用场景并了解HTTP301状态码

    掌握HTTP301状态码的含义:网页重定向的常见应用场景 随着互联网的迅猛发展,人们对网页交互的要求也越来越高。在网页设计领域,网页重定向是一种常见且重要的技术,通过HTTP301状态码来实现。本文将探讨HTTP301状态码的含义以及在网页重定向中的常见应用场景。 HTTP301状态码是指永久重定向…

    2025年12月22日
    000
  • 揭示的语言之谜:HTTP状态码

    HTTP是现代计算机网络中最常用的协议之一,而其中的状态码则是HTTP通信过程中非常重要的一部分。通过状态码,服务器可以向客户端传递各种信息,包括请求成功与否、请求重定向、请求错误等。尽管状态码只是简单的3位数字,但它们背后隐藏着许多语言之谜。 首先,我们来探索一下HTTP状态码的基本分类。按照类别…

    2025年12月22日
    000
  • 揭秘HTTP状态码的含义

    HTTP状态码是用于表示HTTP请求的结果的三位数字代码。这些状态码由HTTP协议规定,并且在与服务器进行通信时,它们扮演着非常重要的角色。尽管每个状态码都有其特定的含义,但是很少有人知道这些代码背后隐藏的深意和故事。本文将探秘HTTP状态码背后的语言之谜。 首先,我们来了解一下最常见的HTTP状态…

    2025年12月22日
    000
  • HTTP状态码405解析:请求方法不被允许的原因何在?

    探秘HTTP状态码405:为何会出现不允许的请求方法? 引言: 在日常的网络使用中,我们经常会遇到HTTP状态码,它们是Web服务响应客户端请求时返回的一种标准化的三位数字代码。这些状态码能够提供有关请求的详细信息,帮助我们理解和处理HTTP请求过程中的问题。其中,HTTP状态码405表示不允许的请…

    2025年12月22日
    000
  • 探究HTTP状态码80的原因及解释

    HTTP状态码是在 HTTP 协议中用于标识服务器对客户端请求的响应状态的数字代码。它们告诉客户端的浏览器或其他应用程序服务器的处理结果。常见的状态码包括 200、301、404、500 等,每个状态码都有其特定的含义和用途。 然而,在 HTTP 状态码中,有一个相对较少被人们关注的状态码,它就是状…

    2025年12月22日
    000
  • 对于HTTP请求超时会返回哪种状态码?

    HTTP请求超时,服务器端常常会返回504 Gateway Timeout状态码。该状态码表示服务器在执行某个请求时,经过一段时间后仍未能获取到请求所需的资源或完成请求的处理。它是5xx系列的状态码,表示服务器端遇到了临时的问题或过载,导致无法正确处理客户端的请求。在HTTP协议中,各种状态码都有特…

    2025年12月22日
    000
  • 常见的HTTP协议状态码及其解释

    了解常见的HTTP协议状态码及其含义,需要具体代码示例 HTTP协议是现代网络通信中最重要的应用层协议之一。在进行Web开发过程中,我们经常会遇到各种各样的HTTP状态码。本文将详细介绍一些常见的HTTP状态码及其含义,并提供相应的代码示例。 200 OK200 OK是最常见的HTTP状态码之一,表…

    2025年12月21日
    000
  • 常见的HTTP 4xx状态码和错误解析

    了解HTTP协议中4xx状态码的含义及常见错误,需要具体代码示例 HTTP协议是互联网通信的基础协议,它定义了客户端和服务器之间的通信规范。在使用HTTP协议进行通信时,客户端发送请求,服务器返回响应。而HTTP状态码是服务器用来表示请求处理结果的一种机制。 HTTP状态码由三位数字组成,以便于划分…

    2025年12月21日
    000
  • HTTP 200 OK:了解成功响应的含义与用途

    HTTP状态码200:探索成功响应的含义与用途 HTTP状态码是用来表示服务器响应状态的数字代码。其中,状态码200表示请求已成功被服务器处理。本文将探索HTTP状态码200的具体含义与用途。 首先,让我们了解一下HTTP状态码的分类。状态码被分为五个类别,分别是1xx、2xx、3xx、4xx和5x…

    2025年12月21日
    000
  • http请求415错误解决方法

    解决方法:1、检查请求头中的Content-Type;2、检查请求体中的数据格式;3、使用适当的编码格式;4、使用适当的请求方法;5、检查服务器端的支持情况。 HTTP请求415错误是指服务器拒绝接受客户端发送的请求,因为请求中包含的实体类型不受支持。这通常是由于客户端发送的请求中包含了不被支持的媒…

    2025年12月21日
    000

发表回复

登录后才能评论
关注微信