教程集 www.jiaochengji.com
教程集 >  Golang编程  >  golang教程  >  正文 swoole基础概念

swoole基础概念

发布时间:2021-04-24   编辑:jiaochengji.com
教程集为您提供swoole基础概念等资源,欢迎您收藏本站,我们将为您提供最新的swoole基础概念资源

swoole实现的tcp服务器,默认使用swoole_process模式即多进程模式,除了worker进程外,会创建master和manager两个进程。
swoole tcp server特点:
1、异步服务器,监听事件
2、当有新的连接会执行onConnect回调,收到数据触发onReceive,客户端断开触发onClose
3、 f d 客 户 端 连 接 唯 一 标 识 4 、 fd客户端连接唯一标识 4、 fd4server->send()向客户端发送数据
5、$server->close()强制关闭客户端连接

swoole tdp server特点:
1、异步服务,事件监听
2、客户端无需连接,onPacket
3、 c l i e n t I n f o 是 客 户 端 相 关 信 息 , 是 一 个 数 组 4 、 clientInfo是客户端相关信息,是一个数组 4、 clientInfo4server->sendto()向客户端发送数据

swoole四层生命周期:
1、程序全局器:$server->start()之前创建的对象资源,持续驻留内存,woker共享,全局期代码在server结束时才释放,reload无效。
2、进程全局器:server启动后创建多个进程,他们内存空间独立,非共享内存。worker进程启动后,引入的代码在进程存活期有效,reload会重新加载。
3、会话期:在onConnect或第一次onRecieve时创建,onClose销毁,客户端连接后创建的对象会常驻内存,直到次客户端离开才销毁。
4、请求器:在onRecieve/onReuqest收到请求时开始,直到发送response返回。请求完成后创建的对象会在请求后销毁。

swoole全局配置选项:
Swoole\Server::set([])
reactor_num—设置为cpu核数的两倍,必须小于或等于worker_num参数
worder_num—业务同步阻塞:1请求50ms,那么单进程qps=100,4进程400qps;业务异步非阻塞,设置为cpu核数的1到4倍
max_request 只能用于同步阻塞程序。base模式该参数无效

事件执行顺序:
所有事件回调均在server start后发生。
服务器关闭终止触发onShutdown。
服务器启动成功,onStart/onManagerStart/onWorkerStart会并发执行。
onReceive/onConnect/onClose在worker进程中触发。
worker/task进程启动和结束分别调用onworkerstart和onworkerstop。
onTask事件仅在task进程中发生。
onFinish事件仅在worker进程中发生。

swoole http server:
继承自swoole/server,支持同步和异步模式。
同步模式等同于php-fpm模式,需要设置大量worker进程完成并发请求处理,编程方式与普通php web程序一致。优点是能应对大量客户端并发请求,类似于nginx。
异步模式:
异步非阻塞,可以应对大量并发请求,但编程要使用异步API。4.3版本已经移除异步模块,建议使用Coroutine。

执行异步任务:
设置的onTask回调函数在task进程池内被异步执行,执行完后return非null的变量或者调用 s e r v e r − > f i n i s h ( ) 来 返 回 结 果 。 r e t u r n 和 server->finish()来返回结果。 return和 server>finish()returnserver->finish()操作都是可选的,onTask也可以不返回结果。
onTask返回结果才会触发onFinish,执行onFinish逻辑的worker进程和下发任务的worker是同一进程。

CSP编程不同于创痛的通过共享内存来通信,CSP讲究以通信的方式来共享内存。swoole使用到了CSP里面的部分概念,参考了Golang的实现,使用go协程作为执行体,用Chan作为实体间通信的通道,Defer在协程退出时执行。

swoole协程特点:
默认开启了enable_coroutine选项,底层会在一些回调函数中自动创建一个协程,此时回调中使用协程API。
协程的切换是隐式发生的,所以协程切换前后不保证全局变量和静态变量的一致性。

swoole协程编程注意:
协程内部禁止使用全局变量。
协程使用use关键字引入外部变量时禁止使用引用传值。
协程之间通讯必须使用channel(IPC,redis等)。
多个协程公用一个连接、使用全局变量,类的静态变量保存上下文会出现错误。

协程执行基本概念:
协程遇到IO等待立即将控制权切换,IO完成后,重新将执行流切换到切出点。
协程并发,依次执行,其余同上。
协程嵌套执行,流程由外向内逐层进入,直到发生IO,然后切到外层协程,父协程不会等待子协程
结束。

并发调用:
1、exec协程并发执行
2、绝大部分协程组件都支持了setDefer特性,可以实现先发送数据,再并发收取响应结果。
3、子协程与通道实现并发请求。
主协程不会等待子协程结束,若需要等待,则需要通道来实现。waitgroup

swoole\table
用于解决多进程、多线程数据共享和同步加锁问题。

到此这篇关于“swoole基础概念”的文章就介绍到这了,更多文章或继续浏览下面的相关文章,希望大家以后多多支持JQ教程网!

您可能感兴趣的文章:
swoole基础概念
php为什么要用swoole?
easyswoole 启动TableManager Cache工具的原理
2020最新swoole视频教程推荐(从入门到高级)
php使用swoole为什么会快
photoshop通道概念使用经验技巧详解
php和c语言哪个好学
php开发难学么
学习J2SE过程中的30个基本概念
linux文件系统路径学习

[关闭]
~ ~