swoole_tcp服务器
2019-05-30 本文已影响0人
骑代码奔小康
一、swoole的tcp服务第一次封装
<?php
//创建Server对象,监听 127.0.0.1:80端口
$serv = new swoole_server("0.0.0.0", 80);
$serv->set([
// 'reactor_num' => 2, // 设置为CPU核数
'worker_num' => 4, // worke进程数 CPU的 1-4倍
'max_request' => 10000 // worker进程的最大任务数
]);
/**
* 监听连接进入事件
* $fd客户端连接的唯一标识
* $reactor_id 线程的id
*/
$serv->on('connect', function ($serv, $fd, $reactor_id) {
echo "Client: {$reactor_id}'----'{$fd}\n";
});
//监听数据接收事件
$serv->on('receive', function ($serv, $fd, $from_id, $data) {
$serv->send($fd, "Server: ".$data);
});
//监听连接关闭事件
$serv->on('close', function ($serv, $fd) {
echo "Client: Close.\n";
});
//启动服务器
$serv->start();
-
写好以后 打开命令窗口 执行 php tcp_server.php ,有连接就会执行connet事件,窗口就会打印出(线程id和用户id)
image.png
-
在一个新窗口执行 netstat -anp|grep 80 查看监听的端口
image.png
3.使用命令 ps aft | grep tcp_server.php 可以查看到 tcp服务器开启的进程数,这个数量与 ('worker_num' => 4, // worke进程数 CPU的 1-4倍)的数量一致
image.png
-
新开一个窗口连接tcp服务器,发送456789,服务端就会执行receive 里的send方法给用户推送456789
image.png
二、tcp客户端
$client = new swoole_client(SWOOLE_SOCK_TCP);
//连接到服务器
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_client.php
就可以看到服务器返回的 数据!
