MomentV1.4:队列IO FTP协议支持

in 前后端开发 with 0 comment

队列IO

在Monent1.3时,写入/读取都是使用buffer的,容易buffer过大导致内存分配失败造成报错退出
于是在一周后,Moment1.4加入了队列IO解决这个问题

write()也返回Promise

队列化的write()支持写入PHP底层后兑现Promise,也就是说现在无需担心会造成写入太多内容内存溢出
旧版:

Promise::await(function(){
    while(true){
        $a -> write(str_repeat('a',1 * 1024 * 1024));
        yield Promise::new(fn($rs) => $this -> on('empty',$rs));
    }
});

新版:

Promise::await(function(){
    while(true){
        yield $a -> write(str_repeat('a',1 * 1024 * 1024));
    }
});

read()避免争夺数据

可能有多个read()并行时容易出现数据抢夺,因此V1.3设置了限制(会报错)
这时V1.4的队列IO就发挥作用了

$a -> readline() -> then(fn($d) => log('accepted:' . $d));
$a -> read() -> then(fn($d) => log('accepted:' . $d));

而旧版会抛出Error

Error: Queue: readIO is busy

FTP协议

为了弥补Moment对WebDAV兼容性问题(无法上传和某些APP兼容性不好),我们引入了FTP协议
支持单独的FTP端口(默认21)和可复用数据接口(默认1024)

FTP

Responses