thinkphp6折腾swoole之http与websocket的踩坑记

方滴云WEB2023-04-11 16:56

对于一个PHPer而言,swoole是一道绕不开的门,门外很精彩,门内 另有一翻景象。去年年初因为单纯想学习折腾了一遍,今年的同期,因为项目需要,不得不在实际项目中折腾它。下面首先跟大家分享thinkphp6折腾swoole之http与websocket的踩坑之路。

强烈建议,上手swoole之前认真的回顾下关于事件的知识,因为很多地方用到了事件监听与事件订阅,如果对事件比较陌生,可能上手起来比较吃亏吧。

这里也吐槽下Thinkphp官方关于事件的文档部分,可能太想说清楚了,到最后看的朦朦胧胧的,看到有个大神的建议,你忽略那个事件的动态绑定与监听,一切会更自然。

言归正传,首先我们查看官方文档关于think-swoole的部分,文档链接如下:https://www.kancloud.cn/manual/thinkphp6_0/1359700。

安装think-swoole,composer执行如下代码:composer require topthink/think-swoole,安装成功之后,在config目录下会多出一个swoole.php文件。这个安装需要事先安装好相应的拓展,如fileinfo/swoole等,当然如果可以强烈建议使用redis。

1. HTTP服务

安装完成后,在控制台,按官网的提示,运行:php think swoole,就可以启动一个http服务,默认端口号是8080,如果您是在用宝塔等安装的,一定记得放行对应端口号,同时服务器上也记得做好相应的配置。

关于swoole.php的配置,大多数时候我们保持默认就可以了,当然端口号可以根据需要调整,然后在nginx里做好反向代理就可以了,这里值得注意的是,做反向代理后,原站可以改成静态了,同时路由规则失效。

这里的操作很简单,也很容易实现,不过官方关于restart/start/stop这里命令好像是无效的,3.x的版本是可以正常使用的。

2. Websocket

开启websocket也非常简单,只需要将swoole.php中websocket对应部分的enable的配置改成true就可以了。因为我们是基本的使用,所以handler类我们使用官方的就可以了。我们只需要在listen或subscribe中监听或订阅事件就可以了,写法见下图,这里建议使用subscribe来统一管理。

这里如果使用listen,监听时要注意下事件的写法,这里可以查看下\think\swoole\websocket\Handler的源码,这里实现了四个事件的发布,我们只要做好监听就可以了,分别是:swoole.websocket.Open/swoole.websocket.Message/swoole.websocket.Event/swoole.websocket.Close

我这里使用的是事件订单,所以只需要在上面的app\subscribe\WsSubscribe类中实现对应的方法即可。规则是在上面的事件中加on,如onOpen。

至此,如果不出意外的话,基本就可以正常的跑起来了。