常在windows开发,php的用的集成环境phpStudy。swoole又要求的Linux环境,不想虚拟机,文件操作起来麻烦,所以就尝试了swoole说的WSL,之前用过这个环境玩别的,而且网络跟当前系统公用,方便端口的使用。
虽说还有Cygwin,但我从没接触过,而且swoole官方也说了,在这个环境下有些功能是受限制的。
前期准备就是装WSL,win10的商店直接装就是了,而且需要在“启用或关闭windows功能”开启“适用于Linux的Windows子系统”。
我用的是ubuntu(现版本18.04.2)
swoole运行在php-CLI模式下,所以仅需安装PHP的环境即可。
直接包安装的php未测试。这只是想编译下php,之前都是包安装的,所以这次尝试换个方法装php。
cd ~
wget https://www.php.net/distributions/php-7.3.5.tar.gz
tar -zxvf php-7.3.5.tar.gz
cd php-7.3.5
wsl的编译环境安装,我在安装libxml2时,连带安装了其他编译所需的工具
sudo apt install libxml2 libxml2-dev -y
我测试的默认的扩展符合swoole的编译运行,所以不加那么多configure参数了,如所需,请自行添加。
./configure --prefix=/usr/local/php
make && sudo make install
最后到/usr/local/php/bin下查看php版本。
官方推荐下releases的,直接拉去的源码可能编译不过,所以听官方的吧。
wget https://github.com/swoole/swoole-src/archive/v4.3.3.tar.gz
tar -zxvf v4.3.3.tar.gz
cd swoole-src-4.3.3
编译前所生成的configure由phpize生成,从/usr/local/php/bin/phpize使用,但我这出现autoConf的问题,所以直接安装autoconf
sudo apt install autoconf m4 -y
/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config
make && sudo make install
完成后,在php的lib/php/extensions目录下存在swoole.so文件
用php.ini加载swlooe.so,使用/usr/local/php/bin/php -i,查看php.ini文件,我这默认编译是没这文件,所以需要知道路径再添加文件
拷贝源码的php.ini-development到此路径下
cp ~/php-7.3.5/php.ini-development /usr/local/php/lib/php.ini
是否加载文件,查看php -i,Loaded Configuration File => /usr/local/php/lib/php.ini,即对。
在文件最后加入extension=swoole.so
echo extension=swoole.so >> /usr/local/php/lib/php.ini
查看是否加载模块,php -m
随便在windows的目录下编写swooleServer.php。
set([
'worker_num'=>2
]);
$swoole_server->on('Connect',function ($sv,$fd){
echo 'User['.$fd.'],Connection';
});
$swoole_server->on('Close',function ($sv,$fd){
echo 'bye'.$fd;
});
$swoole_server->on('Receive',function ($sv,$fd,$fromId,$data){
echo var_dump($data);
$sv->send($fd,'msg:'.$data);
});
$swoole_server->start();
}
}
new swooleServer();
我是在E盘下的thinkphp框架文件夹下写的(写不写在框架下无影响,能在wsl找到即可),wsl访问E盘的路径为/mnt/e/,所在wsl下运行是这样的。
不报错就当它正常了,我懒得写html的客户端,直接用telnet测试了。
连接上的情况
telnet此时可以直接键盘输入字符,服务端同时接收到,
两个客户端
断开其中一个
基本操作都可用, 简单的在Windows下编写服务端,WSL运行测试。
在编译安装php时有个想法,就是把swoole加入到php源码的ext下,这样静态编译swoole,一步到位,但不知道怎么操作,有经验的大佬可以为我指点一下。