swoole是否开源,应用有哪些基本知识要知道
Admin 2022-09-13 群英技术资讯 493 次浏览
今天我们来学习关于“swoole是否开源,应用有哪些基本知识要知道”的内容,下文有详解方法和实例,内容详细,逻辑清晰,有需要的朋友可以参考,希望大家阅读完这篇文章后能有所收获,那么下面就一起来了解一下吧。
swoole是运行在PHP下的一个extesion扩展,实际上与普通的扩展不同。普通的扩展只是提供一个库函数。而swoole扩展在运行后会接管PHP的控制权,进入事件循环。当IO事件发生后,swoole会自动回调指定的PHP函数。
PHP的异步、并行、高性能网络通信引擎,使用纯C语言编写,提供了PHP语言的异步多线程服务器,异步TCP/UDP网络客户端,异步MySQL,异步Redis,数据库连接池,AsyncTask,消息队列,毫秒定时器,异步文件读写,异步DNS查询。
Swoole内置了Http/WebSocket服务器端/客户端、Http2.0服务器端。
Swoole可以广泛应用于互联网、移动通信、企业软件、网络游戏、物联网、车联网、智能家庭等领域。 使用PHP+Swoole作为网络通信框架,可以使企业IT研发团队的效率大大提升,更加专注于开发创新产品。
Swoole底层内置了异步非阻塞、多线程的网络IO服务器。PHP程序员仅需处理事件回调即可,无需关心底层。与Nginx/Tornado/Node.js等全异步的框架不同,Swoole既支持全异步,也支持同步。
Swoole是开源免费的自由软件,授权协议是Apache2.0。企业和个人开发者均可免费使用Swoole的代码,并且在Swoole之上所作的修改可用于商业产品,无需开源(注:必须保留原作者的版权声明)。
Swoole的实现
swoole使用纯C编写,不依赖其他第三方库。
swoole并没有用libevent,所以不需要安装libevent
swoole并不依赖php的stream/sockets/pcntl/posix/sysvmsg等扩展
socket部分
swoole使用底层的socket系统调用。参见 sys/socket.h
IO事件循环
主进程的事件循环使用select/poll,因为主线程中的文件描述符只有几个,使用select/poll即可
reactor线程/worker进程中使用epoll/kqueue
task进程没有事件循环,进程会循环阻塞读取管道
有很多人使用strace -p去查看swoole主进程只能看到poll系统调用。正确的查看方法是strace -f -p
多进程/多线程
多进程使用fork()系统调用
多线程使用pthread线程库
EventFd
Swoole中使用了eventfd作为线程/进程间消息通知的机制。
Timerfd
Swoole使用timerfd来实现定时器
SIgnalfd
swoole中使用了signalfd来实现对信号的屏蔽和处理。可以有效地避免线程/进程被信号打断,系统调用restart的问题。在主进程中reactor线程不会接受任何信号。
1.8.7或更高版本已完全兼容PHP7
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
本篇文章主要给大家介绍了关于PHP的相关知识,Carbon 是php的日期处理类库(A simple PHP API extension for DateTime.),继承了PHP的 Datetime 类,下面讲解一下该类的使用,希望对大家有帮助。
1、创建一个PHP示例文件。2、定义一个正数变量。3、通过“$number *= -1;”方式实现正数转负数即可。
PHP 是解释型语言,其执行过程需先编译成中间代码,再经由特定的虚拟机,翻译成特定的指令被执行。其执行过程如下:PHP 代码 => Token => 抽象语法树 => Opcodes => 执行。
在说明名称解析规则之前,我们先看一些重要的定义:命名空间名称定义非限定名称名称中不包含命名空间分隔符的标识符,例如 Foo限定名称名称中含有命名空间分隔符的...
在thinkphp中,route路由的作用就是简化URL访问地址,并且根据定义的路由类型做出正确的解析,路由的目的就是为了简化路径,在简化路径的同时进行一些规则的定义。
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008