1. XenForo 1.5.14 中文版——支持中文搜索!现已发布!查看详情
  2. Xenforo 爱好者讨论群:215909318 XenForo专区

新闻 swoole-1.8.0 发布,PHP 的异步并行 C 扩展 下载

Discussion in '软件资讯' started by 漂亮的石头, 2016-01-27.

  1. 漂亮的石头

    漂亮的石头 版主 Staff Member

    Joined:
    2012-02-10
    Messages:
    487,404
    Likes Received:
    47
    Swoole-1.8.0 版本已发布,此版本是一个里程碑式新版本,新增了多项新特性、多项核心功能优化以及问题修复、移除了无效的特性。更新内容如下:

    客户端


    • 增加原生异步 MySQL 客户端


    • 增加原生异步 Redis 客户端,基于 Redis 官方提供的 hiredis 库


    • 增加原生异步 Http 客户端


    • 增加原生异步 WebSocket 客户端支持


    • 重构底层 swClient,异步 TCP 客户端实现放到 swoole 内核中


    • 增加 swoole_client->reuse 属性,SWOOLE_KEEP 长连接模式下标识是否为复用的连接
    服务器端


    • 重构 websocket 服务器代码,底层与 length_check 协议复用相同的处理函数,增强稳定性


    • 增加 Task 进程对 tick/after 定时器的支持,底层基于高精度的 setitimer+ 信号实现


    • 保存构造函数中传入的 host、port 参数到 swoole_server 对象属性


    • 增加多端口多协议的支持(重要更新)


    • 增加 swoole_server->defer 函数用于延时执行一些函数


    • 增加 swoole_server->close 强制切断连接的选项,设置第二个参数会 true 会清空发送队列并立即切断连接

    多端口多协议示例:



    $serv = new swoole_server("0.0.0.0", 9501);

    $port2 = $serv->listen('127.0.0.1', 9502, SWOOLE_SOCK_TCP);

    $port2->set(array(
    'open_length_check' => true,
    'package_length_type' => 'N',
    'package_length_offset' => 0, //第N个字节是包长度的值
    'package_body_offset' => 4, //第几个字节开始计算长度
    'package_max_length' => 2000000, //协议最大长度
    ));

    $port2->on('receive', function (swoole_server $serv, $fd, $from_id, $data) {
    echo "ServerPort2\n";
    });

    $serv->on('connect', function ($serv, $fd, $from_id){
    echo "[#".posix_getpid()."]\tClient@[$fd:$from_id]: Connect.\n";
    });

    $serv->on('receive', function (swoole_server $serv, $fd, $from_id, $data) {
    echo "[#".$serv->worker_id."]\tClient[$fd]: $data\n";
    if ($serv->send($fd, "hello\n") == false)
    {
    echo "error\n";
    }
    });

    $serv->on('close', function ($serv, $fd, $from_id) {
    echo "[#".posix_getpid()."]\tClient@[$fd:$from_id]: Close.\n";
    });

    $serv->start();


    其他


    • 增加swoole_table对key值的存储,foreach遍历table时可以获取到key值


    • 更改swoole_table的key对比模式,从crc32比对改为直接进行字符串对比


    • 更新utlist.h库到1.9.9版本

    swoole_table保存Key值会增加内存占用,如table的size为100万,KEY值存储会增加64M内存占用
    问题修复


    • 修复启用消息队列后发生double-free问题


    • 重构定时器,修复after、tick定时器偶然出现的core dump的问题


    • 定时器使用最小堆数据结构,插入/删除时间复杂度为log(N)


    • 修复swoole_process::signal在PHP7下发生core dump的问题


    • 修复swoole_async_write在PHP7下发生core dump的问题
    移除特性


    • 移除未支持的特性相关历史遗留代码,如heartbeat_ping、dispatch_key_type等


    • 移除swoole_server->addtimer、swoole_server->deltimer、swoole_server->gettimer


    • 移除swoole_timer_add、swoole_timer_del


    • 移除swoole_server的onTimer事件




    • 移除task_worker_max配置及相关特性代码


    • 移除swoole_server->handler方法
    swoole-1.8.0 发布,PHP 的异步并行 C 扩展下载地址
     
Loading...