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

新闻 Swoole 1.9 正式版发布,增加多项新特性 下载

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

  1. 漂亮的石头

    漂亮的石头 版主 Staff Member

    Joined:
    2012-02-10
    Messages:
    487,979
    Likes Received:
    47
    Swoole 1.9 正式版发布了。

    PHP的异步、并行、高性能网络通信引擎Swoole 已发布 1.9 正式版。新版本增加了多项新特性,修复了多个已知问题。1.9版本是100%向下兼容1.8的,用户可无缝升级。

    新增 RedisServer 框架


    Swoole-1.9增加了一个兼容Redis服务器端协议的Server框架,可基于此框架实现Redis服务器,支持自定义指令。

    示例:


    use Swoole\Redis\Server;

    $server = new Server('127.0.0.1', 9501);

    $server->setHandler('Set', function($fd, $data) {
    $server->array($data[0], $data[1]);
    return Server::format(Server::INT, 1);
    });

    $server->start();
    客户端增加 pipe 函数


    Swoole-1.9为异步TCP客户端增加了一个pipe方法,可以将客户端收到的数据重定向到另外一个文件描述符,可以是服务器的连接fd、stream资源、sockets资源、其他Swoole\Client、Swoole\Process的管道。

    示例:


    use Swoole\Client;

    $client = new Client(SWOOLE_TCP | SWOOLE_ASYNC);

    $client->on("error", function() {
    echo "connect failed\n";
    });

    $client->on("close", function() {
    echo "connect closed\n";
    });

    $client->on("connect", function($cli) {
    //将数据重定向到标准输出,服务器向客户端发送的所有数据会打印到屏幕
    $cli->pipe(STDOUT);
    });

    $client->connect("127.0.0.1", 9501);
    新增缓存区事件


    1.9增加了2个新的事件回调onBufferFull和onBufferEmpty,以及2个新的配置项buffer_high_watermark和buffer_low_watermark。

    如果写入的数据过多缓存区尺寸超过buffer_high_watermark就触发onBufferFull事件,当缓存区数据发送完成,水位低于buffer_low_watermark的值,会触发onBufferEmpty事件。

    缓存区事件同时可用于Server和Client。

    示例:


    $client = new Swoole\Client(SWOOLE_SOCK_TCP, SWOOLE_SOCK_ASYNC);
    //设置事件回调函数
    $client->on("connect", function($cli) {
    $cli->send("hello world\n");
    });
    $client->on("receive", function($cli, $data) {
    echo "Received: ".$data."\n";
    });
    $client->on("error", function($cli) {
    echo "Connect failed\n";
    });
    $client->on("close", function($cli) {
    echo "Connection close\n";
    });
    $client->on("bufferFull", function($cli) {
    //暂停数据接收
    $cli->pause();
    });
    $client->on("bufferEmpty", function($cli) {
    //恢复数据接收
    $cli->resume();
    });
    //发起网络连接
    $client->connect('127.0.0.1', 9501, 0.5);
    新增 Channel 模块


    swoole-1.9新增了一个新的内存数据结构Channel,类似于Go的chan,底层基于共享内存+Mutex互斥锁实现,可实现用户态的高性能内存队列。


    • Channel可用于多进程环境下,底层在读取写入时会自动加锁,应用层不需要担心数据同步问题


    • 必须在父进程内创建才可以在子进程内使用
    示例:


    $chan = new Swoole\Channel(2 * 1024 * 1024); //2M
    $chan->push(1234);
    $chan->push("hello world");
    $chan->push(array(1234, 4567));
    while($r = $chan->pop())
    {
    var_dump($r);
    }
    新增 mmap 模块


    swoole-1.9增加了一个新的模块,提供了对操作系统mmap的封装。使用mmap 可以很方便地将一个磁盘文件映射为内存,读写性能更高。

    mmap可以减少读写磁盘操作的IO消耗、减少内存拷贝。在实现高性能的磁盘操作程序中,可以使用mmap来提升性能。

    示例:


    $file = __DIR__.'/data';
    $size = 8192;
    $fp = swoole\mmap::eek:pen($file, 8192);

    fwrite($fp, "hello world\n");
    fwrite($fp, "hello swoole\n");

    fflush($fp);
    fclose($fp);
    其他新增特性


    • 增加swoole_clear_dns_cache函数,可清除底层的DNS缓存
    问题修复


    • 修复Redis客户端type方法无法返回字符串的问题


    • 修复Http\Client无法重用的问题


    • 修复同步客户端长度协议package_max_length无效的问题


    • 修复低版本gcc下长期运行偶然发生崩溃的问题


    • 修复异步WebSocket客户端websocket_mask无效的问题


    • 修复MySQL客户端在记录条数过多时偶然崩溃的问题


    • 修复Mac平台下task超过8K时创建临时文件失败的导致无法投递任务的问题


    • 修复taskWaitMulti在进程返回超过8K时接收超时的问题


    • 修复atmoic的add和sub返回值存在的数据同步问题

    下载地址:

    Swoole 1.9 正式版发布,增加多项新特性下载地址
     
Loading...