windows在homestead中安装swoole与使用入门

PECL 的全称是 The PHP Extension Community Library ,是一个开放的并通过 PEAR(PHP Extension and Application Repository,PHP 扩展和应用仓库)打包格式来打包安装的 PHP扩展库仓库。通过 PEAR 的 Package Manager 的安装管理方式,可以对 PECL 模块进行下载和安装。

linux

curl的参数中-o可以指定下载的文件名,-O保持源文件名下载

//都已安装php为前提
curl -o go-pear.php https://pear.php.net/go-pear.phar
php go-pear.php
pecl channel-update pecl.php.net
pecl install swoole

过程
将go-pear.phar放在待安装目录下(我的PHP文件夹位置:D:\phpstudy_pro\Extensions\php\php7.3.4nts\pear),在PHP文件夹中新建了一个pear文件夹,然后把go-pear.phar放进去。
注意事项:第一个一定是选择 local。
第一次执行的时候一定要指定 php的路径,输入13弹出对话框选择PHP的目录。
之后直接按 Enter 继续。完成

homestead安装

进入homestead,查看版本 php -v 开始安装

$ sudo pecl channel-update pecl.php.net
$ sudo pecl install swoole

安装的时候会问你yes/no之类的选项,全部enter下去
看到有success 安装完成,并且上面提示了,你应该添加 extension=swoole.so 到php.ini文件,php.ini文件在哪呢,用这条命令就可以了php -i|grep php.ini
vim编辑一下 /etc/php/7.1/cli/php.ini
注意:编辑php.ini或者切换php版本的时候使用sudo或者切换到root账号 密码也是root,不知道密码可以 输入sudo passwd root命令设置一个密码

;extension=xsl
extension=swoole.so  //  加到这里 

然后,重启一下php,fpm有php7.1-fpm php7.2-fpm还有其他等等,要哪个呢,php -v看下版本,就用对应的版本就可以了,我当前是7.1,就用php7.1-fpm

sudo service php7.1-fpm reload

然后,看一下效果,php -m看看有没有因为 swoole 是在 cli 模式下运行的,所以不能直接看 phpinfo() 中有没有

php -m |grep swoole

查看一下php extension目录,执行php-config或者直接php-config --extension-dir 再看php -i|grep extension

测试 Swoole

下面我们基于 Swoole 编写两个简单的功能来测试 Swoole 是否可以正常工作。

HTTP 服务器

首先我们通过 Swoole 编写一个简单的 HTTP 服务器,在测试目录下创建一个 http_server.php 文件,编写文件代码如下:

<?php

// 表明服务器启动后监听本地 9051 端口
// $server = new Server("127.0.0.1", 9503);
$server = new swoole_http_server('http://swoole.test', 9501);

// 服务器启动时返回响应
$server->on("start", function ($server) {
    echo "Swoole http server is started at http://127.0.0.1:9501\n";
});

// 向服务器发送请求时返回响应
// 可以获取请求参数,也可以设置响应头和响应内容
$server->on("request", function ($request, $response) {
    $response->header("Content-Type", "text/plain");
    $response->end("Hello World\n");
});

// 启动 HTTP 服务器
$server->start();

这样,一个最基本的 HTTP 服务器就完成了,其工作原理和工业级的 Apache 和 Nginx 服务器类似,只不过提供的是最简单的服务器监听和响应功能罢了,我们在终端启用这个服务器:

php http_server.php

这样,表示服务器已经启动并且在监听请求了,到浏览器中访问 http://swoole.test:9501/http_server.php ,即可获取服务器输出响应内容:Hello World

TCP 服务器和客户端

接下来,我们通过 Swoole 及其协程特性实现一个简单的 TCP 服务器和客户端,TCP 协议需要双方通过三次握手建立连接后才能进行通信,所以是一种可靠的协议,常见的聊天室应用就是基于 TCP 协议传输内容。我们还是在前面的测试目录下创建一个 tcp_server.php 文件用于编写 TCP 服务端代码:

<?php
namespace Swoole;

// 监听本地 9503 端口,等待客户端请求
// $server = new Server("127.0.0.1", 9503);
$server = new Server("0.0.0.0", 9503);
// 建立连接时输出
$server->on('connect', function ($serv, $fd){
    echo "Client:Connect.\n";
});
// 接收消息时返回内容
$server->on('receive', function ($serv, $fd, $from_id, $data) {
    $serv->send($fd, 'Swoole: '.$data);
    $serv->close($fd);
});
// 连接关闭时输出
$server->on('close', function ($serv, $fd) {
    echo "Client: Close.\n";
});
// 启动 TCP 服务器
$server->start();

然后在该目录下创建一个 tcp_client.php 文件用于编写 TCP 客户端代码:

<?php
namespace Swoole;

// Swoole4以后通过协程来实现异步通信
go(function () {
    $client = new Coroutine\Client(SWOOLE_SOCK_TCP);
    // 尝试与指定 TCP 服务端建立连接(IP和端口号需要与服务端保持一致,超时时间为0.5秒)
    if ($client->connect("127.0.0.1", 9503, 0.5)) {
        // 建立连接后发送内容
        $client->send("hello world\n");
        // 打印接收到的消息
        echo $client->recv();
        // 关闭连接
        $client->close();
    } else {
        echo "connect failed.";
    }
});

这样,一个最基本的 TCP 服务端和客户端程序就编写完成了,在终端先启动 TCP 服务端

php tcp_server.php

然后新开启一个终端窗口,启动 TCP 客户端

php tcp_client.php

输出从 TCP 服务端接收到消息后 TCP 客户端退出,此时服务端也会打印连接建立和断开的日志消息:

$ php tcp_server.php
Client:Connect.
Client: Close.

客户端退出后,服务端依然处理监听状态,等待下一个请求。

在 Homestead 环境下安装了 swoole, 并且安装了 Laravel-swoole 这个扩展包,运行 php artisan swoole:http start 显示把 swoole 的监听地址改为 0.0.0.0:9501 , 再把虚拟机端口 9501 转发出来访问就行了

posted @ 2020-10-22 17:43  caibaotimes  阅读(317)  评论(0编辑  收藏  举报