Swoole是PHP的异步扩展,能够使用Swoole编写高性能的异步并发TCP、UDP、Unix Socket、HTTP,WebSocket 等服务,Swoole内部还内置Redis,MySQL等数据库异步操作,它是一个十分强大的PHP扩展。
ThinkPHP 5 是TP框架的重构版本,加入了很多的新特性,比之前版本更加规范化合理化,且功能完备,值得使用。
为什么要将其结合呢?
因为我要使用Swoole和ThinkPHP 5.1做一个简单的直播APP模板作为练手内容。
那么如何将Swoole和ThinkPHP 5.1相结合呢?
1、建立server目录
首先和public目录同级新建server目录,并在server目录中创建http_server.php文件,作为 Swoole http服务。
2、workerStart回调事件
在http的workerStart回调事件中,引入框架的基础文件和定义应用目录,
即:index.php中的
和start.php中的
在这里我们不执行App类的run()函数,Run函数在request回调事件中才引入,此时引入为时稍早,因为会直接执行tp5的默认控制器中的默认函数。
workerStart回调事件代码内容:
3、request回调事件
在request事件中,由于Swoole不会自动释放PHP的$_SERVER,$_GET,$_POST等超全局变量,define定义的常量,所以我们需要将其清空。
4、path处理
Swoole的服务起来后,进行url访问时,由于tp5默认将url放在一个变量中并判断变量值去访问,而Swoole服务启动后不会注销变量中的内容,所以,当访问第一个函数后,再访问其他函数,依旧执行的是第一个函数。
我们进入App类的run()函数可以找到run()函数里进行了路由检测:
进入routeCheck()函数查看:
可以发现其调用了Request类的path()函数,我们进入path()函数去查看:
可以发现其对$this->path这个变量进行了is_null的判断,而我们的Swoole起来后,是不会注销变量的,所以这里我们将其判断去除掉,不再使用其is_null判断,这样我们每次访问的url就能正确的到达,因为每次$this->path都会被重新覆盖并赋新值。
将path()和pathinfo()函数的is_null判断都去除掉。
额外的话:其实is_null这个判断在web开发中用处也不大,每次web请求都是重新加载框架内容,判断这个也没什么意义。
5、完整http_server代码
路径 :server/http_server.php
最后,Swoole和ThinkPHP5都是优秀的PHP组件,每个PHPer都应该好好学习这两个组件。
领取专属 10元无门槛券
私享最新 技术干货