Skip to content

Latest commit

 

History

History
62 lines (48 loc) · 1.62 KB

v4.5.md

File metadata and controls

62 lines (48 loc) · 1.62 KB

Swoole 4.5

本文件将 #34 号提案社区内广泛达成一致的内容进行归纳

目标:

  1. 纯粹协程化
  2. 减少历史包袱,提升稳定性
  3. 降低复杂度,减少不必要的选项

删除异步客户端

  • 删除 异步Swoole\ClientSwoole\Http\ClientSwoole\MySQLSwoole\Redis 4个模块。

删除对 FPM 的支持

此条目现在仍然存疑

  • 删除 同步Swoole\Client
  • 仅在Cli模式下启用Swoole

删除 Server 回调

  • 删除 onBufferEmpty
  • 删除 onBufferFull

全新 Coroutine\Server

  • 实现一个全新的,针对协程而设计,区别于Swoole\Server

原型

$server = Coroutine::listen('tcp://127.0.0.1:9501', ['backlog' => 128, 'ssl_key_file' => '', 'open_length_check']);

while ($conn = $server->accept()) {
    // 每接收到一个请求, 就创建一个协程去并发地处理它
    go (function () use ($conn) {
        // 打个招呼
        $conn->send(tcp_pack('Hello~'));
        // 先接收TCP包头长度的数据, 解析包长数据, 再接收包长长度的主体数据
        $data = $conn->recv(tcp_length($conn->recv(tcp_type_length())));
        // 打包后原封不动地发回去
        $conn->send(tcp_pack($data));
        // 开始循环接收, 直到超时或者对方关闭了连接
        while ($len = $conn->recv(tcp_type_length(), 1)) {
            $data = $conn->recv($len);
            echo "{$data}\n";
        }
        // 退出循环体就关闭了
        $conn->close();
    });
}

其他杂项

  • 删除 Swoole\Serialize