三、快速起步
3.1、进程管理
swoole是一个多进程,多线程的服务 master主进程负责创建多个线程来接受和返回用户请求,同时生成一个manager进程,manager进程负责生成和管理N多个worker和task进程,worker和task进程是负责干活的
3.2、环境准备
使用ftp或sftp上传源代码,使用phpstorm提供ftp来直接保存即上传代码。 配置phpstorm支持ftp上传
.
设置保存就上传
让phpstorm更好的支持swoole开发
下载:https://github.com/wudi/swoole-ide-helper
放到项目根目录下面就可以了
3.3、创建TCP服务器
- 构建Server对象
$serv = new SwooleServer('0.0.0.0', 9501, SWOOLE_PROCESS, SWOOLE_SOCK_TCP);
// 参数说明
$host参数用来指定监听的ip地址 0.0.0.0监听全部地址
$port监听的端口,如9501 0-1024之间,是系统默认保留的,所在建议从5000
$mode运行的模式 SWOOLE_PROCESS多进程模式(默认) SWOOLE_BASE基本模式
$sock_type指定Socket的类型 支持TCP、UDP等
- 设置运行时参数
$serv->set(array(
'worker_num' => 2
));
// 参数说明
worker_num 设置启动的Worker进程数 CPU核数的1-4倍最合理
- 注册事件回调函数
// 有新的连接进入时,在worker进程中回调
$serv->on('Connect', function(swoole_server $server, int $fd, int $reactorId){});
// 接收到数据时回调此函数,发生在worker进程中 它不能少
$serv->on('Receive', function(swoole_server $server, int $fd, int $reactor_id, string $data){});
// TCP客户端连接关闭后,在worker进程中回调此函数
$serv->on('Close', function(swoole_server $server, int $fd, int $reactorId){});
// 参数说明
$server 是swoole_server对象 $serv->connections; //当前服务器的客户端连接,可使用foreach遍历所有连接
$fd 是连接的文件描述符
$reactorId 来自那个reactor线程
$data,收到的数据内容
- 启动服务
$serv->start();
测试使用telnet来进行测试
代码语言:javascript复制# 默认系统是没有安装telnet
yum install -y telnet
windows下,默认也是没有安装的
使用
回车进入,按下ctrl ]再次回车,就可以发内容,退出,按ctrl ] 输入 quit 退出
3.4、tcp客户端
代码语言:javascript复制// 同步客户端连接
$client = new SwooleClient(SWOOLE_SOCK_TCP);
// 连接到服务器 ip 端口 超时时间
if (!$client->connect('127.0.0.1', 9501, 0.5))
{
die("connect failed.");
}
// 向服务器发送数据
if (!$client->send("hello world"))
{
die("send failed.");
}
//从服务器接收数据
$data = $client->recv();
if (!$data)
{
die("recv failed.");
}
echo $data;
//关闭连接
$client->close();
原生PHP实现了tcp客户端
3.5、rpc
rpc服务端
客户端调用
效果
集合到tp框架中 定义服务,引入tp入口文件
客户端调用
效果