Swoole 4.4 正式版已发布

Swoole:面向生产环境的 PHP 异步网络通信引擎

使 PHP 开发人员可以编写高性能的异步并发 TCP、UDP、Unix Socket、HTTP,WebSocket 服务。Swoole 可以广泛应用于互联网、移动通信、企业软件、云计算、网络游戏、物联网(IOT)、车联网、智能家居等领域。 使用 PHP + Swoole 作为网络通信框架,可以使企业 IT 研发团队的效率大大提升,更加专注于开发创新产品。

最近更新了 4.4的版本,根据官方发布信息整理

新特性

  • 新增stream_socket_pair协程化支持
  • 新增Http\Server的static_handler_locations设置, 可以设定静态文件路径
  • 新增Co\Http\Client->setBasciAuth方法, 用于自动发送Authorization头
  • 新增 Co\Http2\Client->ping方法
  • 新增hook_flags配置项,用于取代Runtime::enableCoroutine()函数调用
  • 新增协程抢占式调度器, 可防止协程占用CPU时间过长导致其它协程饿死, 通过php.ini配置swoole.enable_preemptive_scheduler = On 开启, 相关例子详见preemptive_scheduler
  • 新增Timer::list()返回Timer\Iterator, 可遍历所有定时器, Timer\clearAll清除所有定时器, Timer\info(int $id)获取定时器信息, Timer::stats()获取全局定时器状态
  • 新增 Co\Socket的两个方法getOption 和 setOption
  • 新增 Process\Pool的$master_pid 属性和 shutdown方法
  • 新增Process\Pool的构造方法的第四个参数, 为true时底层将自动在onWorkerStart回调开启协程

增强

  • 全新的协程MySQL客户端驱动, 底层全面协程化
  • 底层使用C++和协程的编程模式(同步阻塞写法, 异步性能)
  • 支持SSL连接 (connect时配置 ['ssl' => true]即可, 暂不支持证书等配置)
  • 支持超大数据发送 (无上限, 底层自动拼包, 上限为MySQL服务器配置上限)
  • 支持超大数据接收
  • 支持fetch按行读取 (现在的fetch为按需读取, 未fetch的数据不会耗费用户内存)
  • 支持nextResult按需读取 (同上)
  • 客户端close后, 客户端持有的statements自动转为不可用状态, 避免边界问题
  • 优化掉了一些不必要的内存拷贝(协议解析时)
  • date相关类型小数精度支持
  • 错误代码和信息与PDO/mysqli保持一致
  • Co\Redis兼容模式, 通过$redis->set(['compatibility_mode' => true])开启, 可使得hmGet/hGetAll/zRange/zRevRange/zRangeByScore/zRevRangeByScore等方法返回结果和phpredis保持一致
  • 默认允许有100K个协程同时存在
  • 支持bailout机制 (协程内发生致命错误时能正确退出进程)
  • Server发生错误时会根据情况展示友好的400/404/503界面而不是没有任何输出
  • Server默认开启异步安全重启特性和超大数据发送的自动协程调度功能
  • Server的onFinish回调支持自动协程环境
  • Http客户端默认开启websocket_mask, 不再会出现莫名其妙连不上websocket的问题
  • 不再允许在协程外使用Channel的调度操作
  • WebSocket握手失败时切断连接
  • 在Linux下父进程异常退出时底层会自动发送信号杀死子进程
  • 当Socket->recv的数据长度不足时回收末尾无用的内存
  • 浮点数计算误差优化
  • 所有内置类都 禁止克隆/禁止序列化/禁止删除底层定义的属性
  • Server->bind在uid超过UINT32_MAX时会产生警告并返回
  • 兼容PHP7.4

废弃警告

  • 将废弃Buffer模块,废弃原因:可替代性强,使用率低,可用PHP字符串、fopen("memory")代替。
  • 将废弃Lock模块,废弃原因:在协程模式下加锁可能存在问题,可使用chan实现协程版本的锁
  • 由于引入了stream_socket_pair协程化, 建议开启hook时, 如有单独配置需求, 请使用SWOOLE_HOOK_STREAM_FUNCTION常量而不是SWOOLE_HOOK_STREAM_SELECT

你在用swoole时 有哪些好的用法,欢迎评论分享,共同探讨学习

如果觉得文章能够对您有所帮助,可以关注我,你的支持会鼓励我不断分享更多更好的优质文章。

发表评论
留言与评论(共有 0 条评论)
   
验证码:

相关文章

推荐文章

'); })();