首页 > 知识库 > 正文

Swoole-1.8.0版本已发布,新增多项新特性
2016-01-30 18:13:17   来源: matyhtf   评论:0 点击:

? PHP的高性能异步网络通信框架Swoole已发布 1 8 0 版本,此版本是一个里程碑式新版本,新增了多项新特性、多项核心功能优化以及问题修复、移除了无效的特性。更新内容如下: 客户端 增加原生异步MySQL客户端 增加原生异步Redis客户端,基于Redis官方提供的hiredis库 增加原生异步Http客户端 增加原生异步WebSocket客户端支持 重构底层swClie

?

PHP的高性能异步网络通信框架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 "ServerPort2n";});$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]: $datan";    if ($serv->send($fd, "hellon") == false)    {        echo "errorn";    }});$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问题
  • 重构定时器,修复aftertick定时器偶然出现的core dump的问题
  • 定时器使用最小堆数据结构,插入/删除时间复杂度为log(N)
  • 修复swoole_process::signal在PHP7下发生core dump的问题
  • 修复swoole_async_write在PHP7下发生core dump的问题

移除特性

  • 移除未支持的特性相关历史遗留代码,如heartbeat_pingdispatch_key_type
  • 移除swoole_server->addtimerswoole_server->deltimerswoole_server->gettimer
  • 移除swoole_timer_addswoole_timer_del
  • 移除swoole_serveronTimer事件
  • 移除task_worker_max配置及相关特性代码
  • 移除swoole_server->handler方法

?

?

相关热词搜索:php swoole socket 异步 网络通信 language 编程语言

上一篇:当 Swift 中的协议遇到泛型
下一篇:面对谷歌围棋AI,人类最后的智力骄傲即将崩塌

分享到: 收藏