zoukankan      html  css  js  c++  java
  • 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_proExtensionsphpphp7.3.4ntspear),在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
    ";
    });
    
    // 向服务器发送请求时返回响应
    // 可以获取请求参数,也可以设置响应头和响应内容
    $server->on("request", function ($request, $response) {
        $response->header("Content-Type", "text/plain");
        $response->end("Hello World
    ");
    });
    
    // 启动 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.
    ";
    });
    // 接收消息时返回内容
    $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.
    ";
    });
    // 启动 TCP 服务器
    $server->start();
    

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

    <?php
    namespace Swoole;
    
    // Swoole4以后通过协程来实现异步通信
    go(function () {
        $client = new CoroutineClient(SWOOLE_SOCK_TCP);
        // 尝试与指定 TCP 服务端建立连接(IP和端口号需要与服务端保持一致,超时时间为0.5秒)
        if ($client->connect("127.0.0.1", 9503, 0.5)) {
            // 建立连接后发送内容
            $client->send("hello world
    ");
            // 打印接收到的消息
            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 转发出来访问就行了

  • 相关阅读:
    Windows下MemCache多端口安装配置
    PL/SQL Developer 9.x 注册码
    SQL Server 表变量和临时表的区别
    SQL 存储过程入门(事务)
    把存储过程结果集SELECT INTO到临时表
    在T-SQL语句中访问远程数据库(openrowset/opendatasource/openquery)
    解决SQL Server 阻止了对组件 'Ad Hoc Distributed Queries' 的 STATEMENT'OpenRowset/OpenDatasource' 的访问的方法
    C#性能优化实践
    sql server 存储过程中使用变量表,临时表的分析(续)
    Request.Url.Port 获取不到正确的端口号
  • 原文地址:https://www.cnblogs.com/caibaotimes/p/13859701.html
Copyright © 2011-2022 走看看