Windows(WSL)运行swoole

常在windows开发,php的用的集成环境phpStudy。swoole又要求的Linux环境,不想虚拟机,文件操作起来麻烦,所以就尝试了swoole说的WSL,之前用过这个环境玩别的,而且网络跟当前系统公用,方便端口的使用。

虽说还有Cygwin,但我从没接触过,而且swoole官方也说了,在这个环境下有些功能是受限制的。

前期准备就是装WSL,win10的商店直接装就是了,而且需要在“启用或关闭windows功能”开启“适用于Linux的Windows子系统”。

Windows(WSL)运行swoole_第1张图片

我用的是ubuntu(现版本18.04.2)

Windows(WSL)运行swoole_第2张图片

swoole运行在php-CLI模式下,所以仅需安装PHP的环境即可。

编译安装php7.3.5

直接包安装的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版本。

Windows(WSL)运行swoole_第3张图片

swoole的编译和配置

官方推荐下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文件

Windows(WSL)运行swoole_第4张图片

用php.ini加载swlooe.so,使用/usr/local/php/bin/php -i,查看php.ini文件,我这默认编译是没这文件,所以需要知道路径再添加文件

Windows(WSL)运行swoole_第5张图片

拷贝源码的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(WSL)运行swoole_第6张图片

测试Swoole

随便在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测试了。

Windows(WSL)运行swoole_第7张图片

连接上的情况

Windows(WSL)运行swoole_第8张图片

telnet此时可以直接键盘输入字符,服务端同时接收到,

Windows(WSL)运行swoole_第9张图片

两个客户端

Windows(WSL)运行swoole_第10张图片

断开其中一个

Windows(WSL)运行swoole_第11张图片

基本操作都可用, 简单的在Windows下编写服务端,WSL运行测试。

在编译安装php时有个想法,就是把swoole加入到php源码的ext下,这样静态编译swoole,一步到位,但不知道怎么操作,有经验的大佬可以为我指点一下。

你可能感兴趣的:(PHP)