在linux服务器上的安装(以centos7为例)
首先服务器的环境必须要有php 我是直接搭了一个lnmp的环境
(搭建过程:https://blog.csdn.net/zhangzeshan/article/details/96429085 )
先定位到
/usr/local/src
然后下载压缩包
wget https://pecl.php.net/get/swoole-4.2.0.tgz
解压
tar -zxf swoole-4.2.0.tgz
进入解压后的文件夹
cd swoole-4.2.0
安装依赖
yum -y install gcc gcc-c++ autoconf pcre-devel make
编译
phpize
./configure --with-php-config=PATH (PATH指php-config的具体路径)
make && make install
这边的PATH的路径获取 可以通过 find / -name php-config 就可以找到具体路径
之后编辑php.ini文件 (同样不知道php.ini文件在哪里 也是 find / -name php.ini)
增加一行
extension=swoole.so
然后退出 执行命令
php -m
如果显示的扩展中有swoole 那就标识swoole这个扩展安装成功!
以我的服务器为例 我新建一个文件夹 取名swoole
然后新建一个文件夹 TCP
在TCP文件夹下新建文件
server.php(服务端文件)
client.php(同步客户端文件)
async.php(异步客户端文件)
---------------------------------------------------------
先看下server.php代码
set(array(
// 'daemonize' => true,//后台运行
));
/**
* //注册事件回调函数 -----事件驱动--连接--onConnect
* $server是服务端的对象
* $fd是连接的文件描述符 发送数据和关闭连接时需要此参数
*/
$server->on('connect',function ($server,$fd){
echo '有新的客户端连接,连接标识为--------'.$fd.PHP_EOL;
});
/**
* //-----事件驱动--接收--onReceive
* $reactor_id是来自于哪个reactor线程
* $data,收到的数据内容,可能是文本或者二进制内容
*/
$server->on('receive',function ($server,$fd,$reactor_id,$data){
echo '接收客户端信息---------'.$data.PHP_EOL;
//接收之后 返回信息
$server->send($fd,'服务端接收消息成功!');
});
/**
* //-----事件驱动--关闭--onReceive
* $server是服务端的对象
* $fd是连接的文件描述符 发送数据和关闭连接时需要此参数
*/
$server->on('close',function ($server,$fd){
echo '客户端关闭-------------'.$fd.PHP_EOL;
});
//启动服务器
$server->start();
该说明的内容都在代码的注释上
接下来是同步客户端
connect('服务器内网ip',9501,5000)){//如果连接成功
//客户端发送数据
$client->send('我是张泽山');
};
//接收返回信息 从服务器端接收数据
$response = $client->recv();
echo $response.PHP_EOL;
//关闭客户端
$client->close();
然后是异步客户端代码
on('connect',function($client){
$client->send("我是异步客户端!");
});
//绑定接收事件
$client->on('receive',function ($client,$data){
echo "接收消息".$data.PHP_EOL;
});
//绑定错误事件
$client->on('error',function ($client){
});
//绑定关闭事件
$client->on('close',function($client){
});
//连接
$client->connect('服务器内网ip',9501,5000) || exit('连接失败!错误代码:'.$client->errCode);
然后打开xshell 连接服务器
分开两个窗口 一个窗口是执行服务端的php文件 另外一个是执行同步客户端的php文件
如下图所示 左侧是执行服务端 右侧是执行同步客户端
然后先执行左边命令 再执行右边命令 可以看到 客户端向服务端发送了数据 服务端接收到数据之后 返回给客户端信息
如下图所示
以上就是在TCP协议下的 同步客户端和服务端之间的通信
而异步客户端和服务端的通信也是像上述一样 先执行左边 在执行右边 如下图所示
同样的原理 新建一个文件夹UDP
文件下新建文件
server.php(UDP服务端)
client.php(客户端)
先看服务端代码
set(array(
// 'daemonize' => true,//后台运行
));
/**
* UDP数据包时回调此函数
* $server,Server对象
* $data,收到的数据内容,可能是文本或者二进制内容
* $client_info,客户端信息包括address/port/server_socket等多项客户端信息数据
*/
$server->on('packet',function ($server,$data,$client_info){
echo '接收客户端信息---------'.$data.PHP_EOL;
//接收之后 返回信息 客户端ip 客户端端口 发给客户端的内容
$server->sendto($client_info['address'],$client_info['port'],'UDP数据接收成功');
});
//启动服务器
$server->start();
然后是客户端代码
sendto('服务器内网ip',9502,'我是张泽山');
//接收返回信息 从服务器端接收数据
$response = $client->recv();
echo $response.PHP_EOL;
查看结果的操作方法和上述一样 先走服务端的执行命令 在走客户端的执行命令
这就是两种协议下的客户端和服务端之间的通信
作为一名菜鸟,刚开始学swoole,请多多指教!