ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
# 1.8.0 [TOC] ## 客户端 * 增加原生异步MySQL客户端 * 增加原生异步Redis客户端,基于Redis官方提供的[hiredis库](https://github.com/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`方法