写点什么

解决使用宝塔安装的 swoole 扩展,运行项目出现的 3 个常见问题

作者:北桥苏
  • 2023-05-12
    广东
  • 本文字数:942 字

    阅读完需:约 3 分钟

前言:

常常做东西的时候最不愿搭环境了,所以如果只是用于学习或者一些小项目,我都会选择在服务器上使用宝塔面板。自然 swoole 也是直接用 BT 的方式安装,但是呢,最近我写的一个双人对战的五子棋小游戏,在我本机虚拟机上能正常运行。放到之前已经装好 swoole 的服务器上时(宝塔面板安装的),却接连报错。

问题一 :

那个五子棋联机小游戏的后台使用的是 easyswoole,所以我测试性的启动一下。php easyswoole start,却出现 PHP Warning: Module 'swoole' already loaded in Unknown on line 0,重启php fpm 也是报这个错。



根据信息提示,就是 swoole 扩展已经加载过。所以可能就是 php.ini 文件中多出了一个 extension=swoole.so,所以把多的注释或者直接删掉,最好重启一下 php 就没有这个错误了。

问题二:

php 启动是没问题了,通过命令 php -m | less 查看 PHP 安装的扩展中也有 swoole。但是铜通过 php easyswoole start 启动时,又报了一个新的错误。Swoole\Process::__construct() expects at most 3 parameters, 4 given。 错误也指出了文件错误的详细地方,提示是说那个类的构造函数应该是传 3 个参数,但是现在却传了 4 个。



我又回到我虚拟机的环境里的代码,发现没什么异常。导致这种原因的那肯定就是搭建的环境中某个软件的版本原因,首先我先怀疑 PHP 版本,在我认真比对下,PHP 版本一致。后来再看了一下错误,错误的根据是一个 swoole 的函数报错的。所以这肯定是 swoole 版本原因,可能是旧版本函数某个参数被去掉了。于是我通过命令查看了 swoole 版本,php --ri swoole




果然,我之前的是 4.5 版本,而现在宝塔上的这个是 2.2。所以我就去网上找了很多宝塔升级 swoole 版本的方法,确实也有很多。试过了一两个后没起效果,于是我把 swoole 删掉,重新再装一遍。这次我没有按顺序,而是先装 swoole4, 然后再装的 swoole。最后查看版本竟然成功变成了 4.5


问题三:

php easyswoole start 启动也没有报错了,于是我就打开了游戏页面。发现两个玩家全都连接不上服务器,单独将 ws 服务地址请求也连接失败。在放行的宝塔上 ws 服务端口也显示在使用,那这个是什么原因呢。


折腾了一阵后,我才想起来阿里云的服务器也有一个安全组配置。所以肯定是那个端口是被阿里云的系统拦住了,只要找到安全组添加一个入站规则然后加上端口。最后重启 es,打开游戏页面,可以正常运行了。





用户头像

北桥苏

关注

公众号:ZERO开发 2023-05-08 加入

专注后端实战技术分享,不限于PHP,Python,JavaScript, Java等语言,致力于给猿友们提供有价值,有干货的内容。

评论

发布
暂无评论
解决使用宝塔安装的swoole扩展,运行项目出现的3个常见问题_php_北桥苏_InfoQ写作社区