|
8 r0 q% _+ d$ Z5 j3 V* s
前言: 常常做东西的时候最不愿搭环境了,所以如果只是用于学习或者一些小项目,我都会选择在服务器上使用宝塔面板自然swoole也是直接用BT的方式安装,但是呢,最近我写的一个双人对战的五子棋小游戏,在我本机虚拟机上能正常运行。
& | S9 {( G9 f, _5 a% h) @( ^ 放到之前已经装好swoole的服务器上时(宝塔面板安装的),却接连报错问题一 : 那个五子棋联机小游戏的后台使用的是easyswoole,所以我测试性的启动一下php easyswoole start,却出现 PHP Warning: Module swoole already loaded in Unknown on line 0,重启php fpm也是报这个错。
9 q2 Y3 A( y+ X4 O; m 根据信息提示,就是swoole扩展已经加载过所以可能就是php.ini文件中多出了一个extension=swoole.so,所以把多的注释或者直接删掉,最好重启一下php就没有这个错误了问题二: php启动是没问题了,通过命令php -m | less查看PHP安装的扩展中也有swoole。 4 E0 Z! X- V: G$ Z5 U( v+ |, l
但是铜通过php easyswoole start启动时,又报了一个新的错误Swoole\Process::__construct() expects at most 3 parameters, 4 given。 9 a8 D# \( L8 H" ]+ v6 S8 J8 d- ^
错误也指出了文件错误的详细地方,提示是说那个类的构造函数应该是传3个参数,但是现在却传了4个 ( V( L$ d" L7 p" g9 E* c- i
我又回到我虚拟机的环境里的代码,发现没什么异常导致这种原因的那肯定就是搭建的环境中某个软件的版本原因,首先我先怀疑PHP版本,在我认真比对下,PHP版本一致后来再看了一下错误,错误的根据是一个swoole的函数报错的。
9 A2 X$ C/ m' ?* x. ]+ w 所以这肯定是swoole版本原因,可能是旧版本函数某个参数被去掉了于是我通过命令查看了swoole版本,php --ri swoole  " J1 y/ ^7 C$ e/ G1 Z1 M# j
果然,我之前的是4.5版本,而现在宝塔上的这个是2.2所以我就去网上找了很多宝塔升级swoole版本的方法,确实也有很多试过了一两个后没起效果,于是我把swoole删掉,重新再装一遍这次我没有按顺序,而是先装swoole4, 然后再装的swoole。 ' T M9 I% g9 z
最后查看版本竟然成功变成了4.5 ! J; `. Q, q' r: K4 ?
问题三: php easyswoole start启动也没有报错了,于是我就打开了游戏页面发现两个玩家全都连接不上服务器,单独将ws服务地址请求也连接失败在放行的宝塔上ws服务端口也显示在使用,那这个是什么原因呢。 6 o/ k3 H: G/ [( {4 @2 x
折腾了一阵后,我才想起来阿里云的服务器也有一个安全组配置。所以肯定是那个端口是被阿里云的系统拦住了,只要找到安全组添加一个入站规则然后加上端口。最后重启es,打开游戏页面,可以正常运行了。  : k: F9 }0 O3 a- U# f# P4 C( H
$ l1 H4 L" {( s: F2 U
% P6 r1 V1 F4 l
4 |' }) f: B( @* X1 I
% q2 ]- E0 u$ x$ ]1 ?# v" \! Y1 a |