先把Swoole跑起来

在对 Swoole 有一个初步的印象之后,今天我们就来简单地搭建起 Swoole 环境并且运行起一个简单的 Http 服务。大家不用太有压力,今天的内容还没有太多理论方面的东西,一步步地一起把运行环境先准备好,能看到 Swoole 运行起来的效果就可以了。

环境准备

其实安装 Swoole 扩展并不麻烦,和其它的 PHP 扩展一样的安装过程就可以了。不过需要注意的是,Swoole 会和一些扩展产生冲突,比如说 XDebug、phptrace、aop、molten、xhprof、phalcon(协程无法运行在 phalcon 框架中)。

大家一定会担心了,不能使用 XDebug ,我们的调试会很麻烦呀!没关系,Swoole 也有它自己推荐的调试工具,有兴趣的小伙伴可以自己查阅下相关资料。

如果你是 Windows 环境,由于操作系统差异的问题,并没有直接的 dll 扩展包可以使用。所以在 Windows 环境下最好是建一个虚拟机,然后设置 PHPStrom 的同步就可以方便地进行开发了。这个配置我就不多说了,百度一搜一大堆。

在这里,我也是通过虚拟机安装的,系统环境为 CentOS8、PHP8.1、Swoole4.8.3、MySQL8.0.27 都是最新的,如果你是 PHP7 以及 Swoole4.4 的话也是没问题的,不会有很大的区别。其它的工具,比如 Nginx、Redis 等,大家可以根据情况安装,我们在后续的课程中也会用到。

扩展安装成功后,在 php.ini 文件中加上扩展信息,然后就可以通过下面的命令行查看 Swoole 的版本信息以及扩展配置情况。

[root@localhost ~]# php --ri swooleswooleSwoole => enabled
Author => Swoole Team <team@swoole.com>
Version => 4.8.3
Built => Dec  7 2021 22:01:03
coroutine => enabled with boost asm context
epoll => enabled
eventfd => enabled
signalfd => enabled
cpu_affinity => enabled
spinlock => enabled
rwlock => enabled
zlib => 1.2.11
mutex_timedlock => enabled
pthread_barrier => enabled
futex => enabled
async_redis => enabledDirective => Local Value => Master Value
swoole.enable_coroutine => On => On
swoole.enable_library => On => On
swoole.enable_preemptive_scheduler => Off => Off
swoole.display_errors => On => On
swoole.use_shortname => On => On
swoole.unixsock_buffer_size => 8388608 => 8388608

启动一个服务

相信各位大佬对环境和扩展的安装都是没问题的,如果有问题的话,问我也没用,编译安装这些东西有很多玄学(懵逼)问题存在的,只能是多拿虚拟机练手玩了。环境安装成功后,我们就先来简单地搭建一个 Http 服务吧。

什么?直接起一个 Http 服务?不是要用 Nginx 或者 Apache 吗?忘了上篇文章中我们说过的东西了吧,Swoole 是直接启动服务的,而不是像传统的 PHP 使用 FastCGI 来启动 php-fpm 这种形式的。或者,你也可以理解为直接使用 Swoole 启动的服务就是 php-fpm 使用连接形式启动的那个 9000 端口的服务。

关于 php-fpm 相关的知识,我们之前在

了解PHP-FPM https://mp.weixin.qq.com/s/NUpDnfYfbPuWmal4Am3lsg

中有过详细的说明,大家可以回去看看哦。

好了,让我们进入正题,先新一个文件,然后输入下面的代码。

<?php
$http = new Swoole\Http\Server('0.0.0.0', 9501);$http->on('Request', function ($request, $response) {echo "接收到了请求";$response->header('Content-Type', 'text/html; charset=utf-8');$response->end('<h1>Hello Swoole. #' . rand(1000, 9999) . '</h1>');
});echo "服务启动";
$http->start();

将它放到开启了 Swoole 环境的系统中,然后去执行命令行脚本运行它。

[root@localhost source]# php 2.1先把Swoole跑起来.php
服务启动

一运行起来命令行就停住了,很明显,现在程序已经被挂载起来了。然后我们去浏览器访问页面,如果是本机的话,直接 http://localhost:9501 就可以了,如果是虚拟机,访问虚拟机的 IP 地址并加上端口号。注意,访问失败的话可以检查下有没有关掉防火墙。

访问页面的结果可以看到如下截图。

同时,命令行中也会输出下面的内容。

[root@localhost source]# php 2.1先把Swoole跑起来.php
服务启动接收到了请求

恭喜你,你的 Swoole 环境没有任何问题哦,现在一个最简单的 Http 服务器已经搭建成功啦!

接下来,我们尝试修改一下文件内容,像上面的输出信息并没有换行,我们把换行符加上吧。

// .....echo "接收到了请求", PHP_EOL;
// .....echo "服务启动", PHP_EOL;

再次请求页面,你会发现命令行中输出的内容还是没有换行,这是为什么呢?

还记得我们在上篇说过的动态语言与静态语言的问题吧,现在的 Swoole 其实就已经是类似静态语言的运行方式了。它已经将程序挂载起来成为一个独立的进程,其实这个时候就相当于已经编译成了一个类似于 jar 或者 exe 的文件,并且直接运行起来了。因此,我们修改文件是不会对当前进程中的程序产生任何影响的。如果要更新修改之后的内容,就需要重新启动服务。现在就 Ctrl+C 先关闭应用,然后再命令行执行一下吧。你会看到输出就会有换行了。

[root@localhost source]# php 2.1先把Swoole跑起来.php
服务启动
接收到了请求
接收到了请求
接收到了请求
接收到了请求

echo 为什么打印在命令行了

相信不少同学又会有一个疑问,为什么 echo 被输出到命令行了?传统的 PHP 开发中,我们的 echo 是直接输出到页面了呀?

这就是另一个 Swoole 与传统开发的不同。在 Swoole 中,我们的服务程序是使用命令行挂起的,我们上面的代码其实在内部是实现了一个 Http 服务功能,而不是通过 php-fpm 去输出给 Nginx 这种服务器的。转换一个角度来想,php-fpm 也只是把这些输出交给了服务器程序,然后由服务器程序原样给输出到页面上。但是在 Swoole 中,echo 之类的输出流是直接将结果发送到操作系统对应的 stdout 上了。相对应地,我们的服务输出则是直接通过 Swoole 代码中的服务回调参数上的 response 对象来进行服务流输出过程的。

这个地方的思维是需要大家转变一下的。如果你学习过 Java 开发的话对这里应该不会陌生,在 Swoole 环境下,echo(print、var_dump()等等)之类的传统输出就变成了 Java 中的 System.out.println() 。同样,在 Java 中,不管什么框架,你要输出页面上的结果值,也是通过类似于一个 Response 对象来实现的。其实,就只是将我们打印的内容输出到了不同的流上,普通的打印流到了 stdout 上,而 Response 对象则是通过 TCP 将结果输出到了响应流上。这一块的原理就很深了,至少得要更深入的学习网络相关的知识,可惜目前的我水平还达不到,所以有兴趣的小伙伴还是自己去查阅相关的资料吧!

总结

今天的学习内容不多,最主要的是我们先了解一下最简单的 Http 服务是如何跑起来的,以及在输出方面与传统开发模式的异同。当然,更重要的是,你现在得要把开发环境准备好。否则后续的内容就没法跟着一起实践了哦。

测试代码:

https://github.com/zhangyue0503/swoole/blob/main/2.基础/source/2.1先把Swoole跑起来.php

参考文档:

https://wiki.swoole.com/#/environment

https://wiki.swoole.com/#/start/start_http_server

【Swoole系列2.1】先把Swoole跑起来相关推荐

  1. swoole一键携程化mysql_【SWOOLE系列】浅淡SWOOLE协程(二) 一键协程化

    前言 是的,我又来了,我带着我的文章表情包回来. 再这感谢swoole大佬们的点赞和转载,让我短暂的感受到了什么要叫高光时刻. 背景 我相信大部分人一开始用swoole的协程的时候都会再协程里写了一大 ...

  2. 视频教程-php进阶课程之swoole系列课程精讲(第一季)-PHP

    php进阶课程之swoole系列课程精讲(第一季) 多年一线互联网开发实战以及培训经验,对php开发,linux运维架构有丰富的经验,善于分析问题,解决问题. lampol ¥199.00 立即订阅 ...

  3. 【Swoole系列3.5】进程池与进程管理器

    进程池与进程管理器 我们已经学习过单个进程相关的内容,也学习了进程间如何进行通信,但是,一个一个地进程还是非常不好管理,这不,Swoole 就为我们直接准备好了进程池以及进程管理相关的工具. 进程池 ...

  4. swoole系列(一)- swoole入门与介绍

    目录 1. swoole的概念介绍 1.1 介绍Swoole - 概念 - 网络通信 1.2 介绍Swoole-与workerman的碰撞 1.3.介绍Swoole-应用 1.4.介绍Swoole-衍 ...

  5. swoole单台并发php,php swoole 并发多少?

    智慧大石 HttpServer$serv = new Swoole\Http\Server("127.0.0.1", 9502);$serv->on('Request', f ...

  6. php swoole 项目实战,Laravel 中使用 swoole 项目实战开发案例一 (建立 swoole 和前端通信)...

    最近使用swoole做了项目,里面设计推送信息给界面前端,和无登陆用户的状态监控,以下是本人从中获取的一点心得,有改进的地方请留言评论. 1 开发需要环境 工欲善其事,必先利其器.在正式开发之前我们检 ...

  7. swoole mysql 连接池_基于Swoole的通用连接池 - 数据库连接池

    连接池 open-smf/connection-pool 是一个基于Swoole的通用连接池,常被用作数据库连接池. 依赖 依赖 版本 >=7.0.0 >=4.2.9 Recommend ...

  8. Swoole入门指南:PHP7安装Swoole详细教程(一) 1

    这里不在使用apache做为web server.该用nginx + php-fpm,性能更强大,配置更方便.并且为了跟上php的步伐,也使用了比较新的php版本 [x] centos7 [x] ph ...

  9. 痞子衡嵌入式:IVT里的不同entry设置可能会造成i.MXRT1xxx系列启动App后发生异常跑飞...

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是IVT里的不同entry设置可能会造成i.MXRT1xxx系列启动App后发生异常跑飞问题的分析解决经验. 事情缘起恩智浦官方论坛上的一 ...

最新文章

  1. 深入理解C语言的define
  2. 爬虫之 lxml模块的安装与使用示例
  3. 在C++项目中引入Lua(AlphaGo使用的方案)
  4. struct 与 class区别
  5. UA SIE545 优化理论基础 例题 对偶函数的凸性与次梯度计算
  6. PHP开发环境MAMP for Windows
  7. WPF保存包含Winform控件的XAML页面问题
  8. JS OOP -02 深入认识JS中的函数
  9. c语言中10转8和16的转换,(C语言)10进制转换2,8,16进制
  10. 实例41:python
  11. LeetCode-1423:可获得的最大点数
  12. Erlang实战练习(一)
  13. Linux入门命令解释(1)
  14. Java的数据类型转换
  15. SpringBoot+Vue项目校园闲置物品交易系统
  16. 推荐10款最佳的App安全测试工具
  17. 破解获取微信小程序源代码
  18. 服务器带宽打开网页很慢,网速快但是打开网页慢是怎么回事 浏览器打开网页慢的解决办法汇总...
  19. 超火的炫酷告白源码(HTML+CSS),前端表白源码,520表白,七夕情人节专属源码--文字开场白+相册旋转+浪漫3D樱花樱花雨
  20. c语言less函数,LESS使用方法

热门文章

  1. Apex机器码-逃离塔科夫机器码(年度最新教程依旧可用)
  2. HTML按钮控制数据源 + echarts图表展示
  3. 微信公众号开发--双色球彩票开奖结果(Java版)
  4. MATLAB R2023a for Mac v 9.14.0 (2206163)中文版
  5. 物理引擎学习07-小游戏飞机大战
  6. 什么是支付网关 支付网关全面解答
  7. idea出现NBSP
  8. 2021级新生程序设计班级天梯赛:2-1 《天堂旅行团》
  9. 第09章 Go语言并发,Golang并发
  10. qq 与 360 打架, qq 无理