PHP的异步、并行、高性能网络通信引擎Swoole发布1.10.0版本。此版本添加了几个新功能。DNS自动解析新版异步客户端不再需要使用swoole_async_dns_lookup解析域名,底层实现了域名自动解析。客户端在执行connect方法时可以直接传入域名。$client=newswoole_client(SWOOLE_SOCK_TCP,SWOOLE_SOCK_ASYNC);$client->on("连接",function(swoole_client$cli){$cli->send("GET/HTTP/1.1\r\n\r\n");});$client->on("receive",function(swoole_client$cli,$data){echo"接收:$data";$cli->send(str_repeat('A',100)."\n");sleep(1);});$client->on("error",function(swoole_client$cli){echo"error\n";});$client->on("close",function(swoole_client$cli){echo"Connectionclose\n";});//底层会自动进行异步域名解析$client->connect('www.baidu.com',9501);新版慢请求日志增加跟踪慢请求函数可以记录慢请求的PHP函数调用栈。functiontest(){test_sleep();}functiontest_sleep(){echo"sleep5\n";睡眠(5);}$server=newswoole_server('127.0.0.1',9501);$server->set(['worker_num'=>1,'task_worker_num'=>1,'trace_event_worker'=>true,'request_slowlog_timeout'=>1,'request_slowlog_file'=>'/tmp/trace.log',]);$server->on('Receive',function($serv,$fd,$reactor_id,$data){test();$serv->send($fd,"Swoole:$data");});$服务器->开始();处理慢请求后,/tmp/trace.log日志中会打印一行错误信息:[08-Jan-201815:21:57][worker#0]pid26905[0x00007f60cda22340]sleep()/主页/htf/workspace/swoole/examples/server/trace.php:10[0x00007f60cda222e0]??test_sleep()/home/htf/workspace/swoole/examples/server/trace.php:4[0x00007f60cda22280]test()/home/htf/workspace/swoole/examples/server/trace.php:28[0x00007f60cda22190]{closure}()/home/htf/workspace/swoole/examples/server/trace.php:42[0x00007f60cda22140]start()/home/htf/工作空间/swoole/examples/server/trace.php:42新的STREAM模块新的stream模块使得Reactor、Worker、Task进程之间的通信更加灵活,使用stream模式最大程度解耦复杂的在线项目,请求分配和调度更加高效。$serv=newswoole_server("127.0.0.1",9501);$serv->set(array('dispatch_mode'=>7,'worker_num'=>2,));$serv->on('receive',function(swoole_server$serv,$fd,$threadId,$data){var_dump($data);echo"#{$serv->worker_id}>>receivedlength=".strlen($数据)."\n";});$服务->开始();Reactor和Worker的通信,使用dispatch_mode=7开启Worker和Task的通信,使用task_ipc_mode=4开启添加Event::cycle函数用户代码可以自定义一个EventLoop的hook函数,这个函数会在每次结束时被调用一轮事件循环。使用Generator+Yield或者类Promise的Swoole框架实现自己的调度器很方便。Swoole\Timer::tick(2000,function($id){var_dump($id);});Swoole\Event::cycle(function(){echo"hello[1]\n";Swoole\Event::cycle(function(){echo"hello[2]\n";Swoole\Event::cycle(null);});});其他更新更新Table::incr和Table::decr支持有符号整数兼容PHP-7.2版本修复Event::del函数无法移除标准输入句柄的问题修复Task进程中timer间隔为小于Client接收超时时间,导致Client::recv死锁问题添加ssl_host_name配置项,验证SSL/TLS主机合法性当使用dispatch_mode=3时,所有Worker都忙时会打印错误日志。添加一个端口迭代器,它可以遍历一个监听端口的所有连接。修复Table在非x86平台上的内存对齐问题。修复BASE模式下Max_request配置无效的问题。修复部分客户端ping带掩码数据的帧时,WebSocket服务器返回错误数据包的问题。修复HttpClient使用HEAD方式响应Content-Length导致卡住的问题。添加MySQL异步客户端对JSON格式的支持下载地址GITHUB:https://github.com/swoole/swo...开源中国:https://gitee.com/swoole/swoo...PECL:https://pecl.php.net/包/...
