首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

不同组件能够完美融合使用是一件很美妙的事情

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都应该好好学习这两个组件。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180910G1IL7A00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券