在docker中给php添加swoole扩展

在docker中给php添加swoole扩展

获取swoole扩展

这里可以选择swoole版本https://pecl.php.net/package/swoole

  1. 使用wget https://pecl.php.net/get/swoole-4.8.9.tgz下载扩展文件,这里我下载的是4.8.9的版本
  2. 解压文件tar zxvf swoole-4.8.9.tgz
安装扩展
  1. 将文件复制到容器的扩展目录

    1. 容器内默认没有 /usr/src/php这个目录,需要docker exec -it myphp /bin/bash进入容器使用docker-php-source extract 创建目录
    2. exit退出容器
    3. 将扩展文件复制到容器中docker cp swoole-4.8.9 myphp:/usr/src/php/ext/swoole
  2. 使用docker exec -it myphp /bin/bash命令进入我之前创建的php容器

  3. docker-php-ext-install swoole安装swoole扩展,耐心等几分钟

  4. php -m|grep swoole 查看是否安装swoole扩展
    在这里插入图片描述

测试swoole扩展

这里主要参考了http://www.manks.top/swoole-socket-server.html,感谢大佬

  1. 进入容器myphp映射目录cd /docker/nginx/www/myphp/

  2. 创建server.php用于创建一个swoole服务vim server.php

  3. <?php
            $serv = new swoole_server('127.0.0.1',9501);//创建一个server对象,9501代表端口
            //设置worker进程数
            $serv->set([
                    'worker_num' => 2
            ]);
            //当有新的客户端连接时,会触发此回调,参数$serv是最开始创建的server对象,$fd是唯一标识,用于区分不同的客户端
            $serv->on("Connect",function($serv,$fd){
                    echo "有新的连接".PHP_EOL;
            });
            //server接收到客户端的数据后,worker进程触发该回调方法,$fromId指的是reactor线程,$data是客户端传递过来的数据,可以是字符串或二进制内容,目前使用字符串
            $serv->on('Receive',function($serv,$fd,$fromId,$data){
                    //收到数据后发送给客户端
                    $serv->send($fd,'Server'.$data);
            });
            //客户端断开后或者server主动关闭连接时worker进程内调用
            $serv->on('Close',function($serv,$fd){
                    echo "连接关闭".PHP_EOL;
            });
            //启动serv
            $serv->start();
    ?>
    
  4. 创建一个index.php 当作客户端,访问服务

  5. <?php
    // 创建一个同步阻塞的tcp socket
    // 第一个参数是表示socket的类型,有下面四种类型选择,这里选则tcp socket就好
    /**
     *  SWOOLE_SOCK_TCP 创建tcp socket
        SWOOLE_SOCK_TCP6 创建tcp ipv6 socket
        SWOOLE_SOCK_UDP 创建udp socket
        SWOOLE_SOCK_UDP6 创建udp ipv6 socket
     */
    // 第二个参数是同步还是异步
    /**
     *     SWOOLE_SOCK_SYNC 同步客户端
        SWOOLE_SOCK_ASYNC 异步客户端
     */
    $client = new swoole_client(SWOOLE_SOCK_TCP, SWOOLE_SOCK_SYNC);
    
    // 随后建立连接,连接失败直接退出并打印错误码
    $client->connect('127.0.0.1', 9501) || exit("connect failed. Error: {$client->errCode}\n");
    // 向服务端发送数据
    $client->send("你好啊");
    // 从服务端接收数据
    $response = $client->recv();
    // 输出接受到的数据
    echo $response . PHP_EOL;
    // 关闭连接
    $client->close();
    ?>
    
  6. docker exec -it myphp /bin/bash 进入php容器

  7. cd /www/myphp/ 进入存放代码目录

  8. 运行php server.php,此时服务打开了

  9. 访问浏览器地址

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值