栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

php应用容器workerman

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

php应用容器workerman

workerman使用文本协议上传文件。

协议定义

json+换行,json中包含了文件名以及base64_encode编码(会增大1/3的体积)的文件数据

协议样本

{“file_name”:“logo.png”,“file_data”:“PD9waHAKLyo…”}n

注意末尾为一个换行符,在PHP中用双引号字符"n"标识

协议实现

namespace Protocols;
class TextTransfer
{
    public static function input($recv_buffer)
    {
        $recv_len = strlen($recv_buffer);
        if($recv_buffer[$recv_len-1] !== "n")
        {
            return 0;
        }
        return strlen($recv_buffer);
    }

    public static function decode($recv_buffer)
    {
        // 解包
        $package_data = json_decode(trim($recv_buffer), true);
        // 取出文件名
        $file_name = $package_data['file_name'];
        // 取出base64_encode后的文件数据
        $file_data = $package_data['file_data'];
        // base64_decode还原回原来的二进制文件数据
        $file_data = base64_decode($file_data);
        // 返回数据
        return array(
             'file_name' => $file_name,
             'file_data' => $file_data,
         );
    }

    public static function encode($data)
    {
        // 可以根据自己的需要编码发送给客户端的数据,这里只是当做文本原样返回
        return $data;
    }
}

服务端协议使用示例

说明:写法与二进制上传写法一样,即能做到几乎不用改动任何业务代码便可以切换协议。

use WorkermanWorker;
use WorkermanConnectionTcpConnection;
require_once __DIR__ . '/vendor/autoload.php';

$worker = new Worker('TextTransfer://0.0.0.0:8333');
// 保存文件到tmp下
$worker->onMessage = function(TcpConnection $connection, $data)
{
    $save_path = '/tmp/'.$data['file_name'];
    file_put_contents($save_path, $data['file_data']);
    $connection->send("upload success. save path $save_path");
};

Worker::runAll();

客户端文件 textclient.php (这里用php模拟客户端上传)

 $file_name,
    'file_data' => $file_data,
);
// 协议包 json+回车
$package = json_encode($package_data)."n";
// 执行上传
fwrite($client, $package);
// 打印结果
echo fread($client, 8192),"n";

客户端使用示例

命令行中运行 php textclient.php <文件路径>

例如 php textclient.php abc.jpg

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/643170.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号