swoole-了解swoole

本文介绍Swoole的基础知识及入门指引,涵盖Swoole框架的特性、版本、开发工具等,并详细解析$server对象的构造、配置及事件回调机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

初识swoole

swoole官网https://www.swoole.com/

可能需要掌握一些tcp/ip

  • 入门书籍:《tcp/ip网络编程(尹圣雨 韩)》。
  • 深入书籍:《unix环境高级编程(中文第三版)》;《unix网络编程卷1:套接字联网》;《unix网络编程卷2:进程间通信》。

题外话
swoole补充了对比其他语言没有的网络编程库,紧接着学习swoft框架,微服务。最后通过swoole可以进一步学习go语言。

swoole vs workman
swoole是C语言编写,不依靠php的扩展。workman依赖php的扩展。swoole的特性更丰富、稳定性好一些,但workman可以用来了解背后的基本原理。

基于swoole扩展的框架

  • swoft 社区比较活跃
  • easyswoole 相对简单 轻量级
  • swooleDistributed

传统框架和swoole框架
swoole框架在性能方面比传统框架要高很多,没有性能要求则使用传统框架。

版本
已更新至4.3。swoole2.0增加协程。swoole3.0以上版本要求php>=7.0。

开发工具
在这里插入图片描述
这两个还是蛮实用的。
在这里插入图片描述
IDE helper包下载后放进任意目录,然后IDE include path即可。
在这里插入图片描述
学习swoole 的注意事项

  • swoole一般是linux环境。
  • 阿里云安全组开放协议、端口。服务器如有防火墙,开放端口。

一些概念

swoole入门指引
在这里插入图片描述

swoole底层是C写的。swoole系列函数可以理解为swoole提供给php的api,php通过swoole系列函数调用swoole的api,来启动swoole服务、注册回调函数等,swoole的事件驱动来执行对应的回调函数。这完全区别于普通的php扩展只提供库函数,而对于swoole,php只是传递的作用,真正的程序控制权是swoole。

学习swoole的基础知识
在这里插入图片描述

linux是必须的。学习swoole需要对进程线程、异步同步、IO复用、reactor模型、进程间通讯、信号等概念有所了解,可学习《tcp/ip网络编程》这本书做简单的理解,通过php对应的扩展,借鉴workman源码来理解机制,这样会对swoole的学习有很大帮助。

swoole的实现
手册

swoole并没有用libevent,所以不需要安装libevent。swoole并不依赖php的stream/sockets/pcntl/posix/sysvmsg等扩展

libevent是一个事件驱动库,php有对应的event扩展,可帮助理解swoole的io复用和事件机制。
stream/sockets是网络通讯的工具、可帮助理解swoole的tcp/udp/http。
pcntl/posix是进程控制扩展,可帮助理解swoole中的多进程、进程间通讯。
sysvmsg消息队列,可帮助理解swoole中的task模块。

swoole进程结构
在这里插入图片描述

  • Master主进程
  • manager管理进程
  • worker子进程
  • task任务进程
  • MainReactor主线程
  • reactor线程组

Swoole的进程/线程模型:
在这里插入图片描述
Swoole程序的执行流程:
在这里插入图片描述
这里暂不介绍了,接下来会逐渐涉及。

Server部分文档概述

swoole我也是初学,理解不到位的请谅解。

整体
在这里插入图片描述

从server入手

在这里插入图片描述
函数列表
在这里插入图片描述
这里的意思是$server对象可以调用的函数,接下来理解下这部分。
比如我们用__construct先创建一个$server

$server = new Server(
string $host, //监听的Ip地址,通常为0.0.0.0,监听所有ip地址
int $port = 0, //端口
int $mode = SWOOLE_PROCESS,//默认多进程模式
int $sock_type = SWOOLE_SOCK_TCP);//TCP UDP 默认TCP
// 创建server
$server=new Swoole\Server("0.0.0.0",6001);

那么函数列表里的函数,是$server调用的。
可能在外层调用:

1) server :: __construct 构造函数 创建一个tcp/udp服务器
$server=new Swoole\Server("0.0.0.0",6001);

2)server->set 为服务器配置选项
$server->set([
		'worker_num'=>1, //子进程数量
	]);

3)server->on 注册事件
$server->on('connect',function(){
	echo "new connect!".PHP_EOL;
});

$server->on('receive',function(){
	echo "new message received!".PHP_EOL;
});

$server->on('close',function(){
	echo "one client closed!".PHP_EOL;
});

4)server->start 启动服务器
$server->start();

也可能在回调中调用:server->send server->close

$server->on('receive',function($server, $fd){
	$server->send($fd, 'Swoole: '.$data);
    $server->close($fd);
});

总之函数下的所有函数是$server调用的。

属性列表
在这里插入图片描述
这个没什么好说的,获取配置项,获取主进程pid,获取当前子进程编号id等等。

配置选项
在这里插入图片描述
配置选项在server->set函数中设置,比如设置子进程数量:

$server->set([
		'worker_num'=>1,
	]);

以此类推,放进数组里即可。

监听端口
在这里插入图片描述
监听端口是swoole支持多协议多端口,即一个服务器上(一个php文件代码上)可以支持多个协议的业务,可以监听多个端口,这就厉害了,不用另外创建一个单独的服务器(再写一个php脚本)。

下面的可选参数,可选回调什么意思呢?
比如监听一个新的端口:

//主服务器 $server->
$server=new Swoole\Server("0.0.0.0",6001);
$server->set([
		'worker_num'=>1,
	]);
$server->on('connect',function(){
});
$server->on('receive',function($server, $fd){
});
$server->on('close',function(){
});
	
//监听一个新端口 注意下面都是$port1->
$port1 = $server->listen("0.0.0.0", 9501, SWOOLE_SOCK_TCP);
$port1->set([
 	//可选参数
	]);
	
//可选回调
$port1->on('connect',function(){
});
$port1>on('receive',function($server, $fd){
});
$port1->on('close',function(){
});

下面的port1,->set支持的参数,->on支持的回调,是有限制的。它和server不是平级的,也就是说有些参数和回调是server级别的。比如->set([‘worker_num’=>1])是server独有的配置参数,port1不能配置。哪些参数可以配置,哪些不可以配置,文档中有说明,需要注意这点。

预定义常量
在这里插入图片描述
看看就好

事件回调函数
在这里插入图片描述
事件回调函数是在server->on()中配置的。上边已有很多示例了,只需要各自了解使用场景就好。

好了,整个server的大体已经了解完了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值