Swoole
  1. 入门
    1. Swoole - 入门 - 安装
    2. Swoole - 入门 - 创建TCP服务器
    3. Swoole - 入门 - 创建UDP服务器
    4. Swoole - 入门 - 创建HTTP服务器
    5. Swoole - 入门 - 创建websocket服务器
    6. Swoole - 入门 - 创建同步TCP客户端
    7. Swoole - 入门 - 创建异步TCP客户端
    8. Swoole - 入门 - 网络通信协议设计
    9. Swoole - 入门 - 使用异步客户端(MySQL,Redis,Http)

Swoole - 入门 - 创建同步TCP客户端

程序员日记      2019-09-19

创建同步TCP客户端

client.php

<?php
$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();

说明

创建一个TCP的同步客户端,此客户端可以用于连接到我们创建TCP服务器文章中的示例服务器。向服务器端发送一个hello world字符串,服务器会返回一个 Server: hello world字符串。

这个客户端是同步阻塞的,connect/send/recv 会等待IO完成后再返回。同步阻塞操作并不消耗CPU资源,IO操作未完成当前进程会自动转入sleep模式,当IO完成后操作系统会唤醒当前进程,继续向下执行代码。

TCP需要进行3次握手,所以connect至少需要3次网络传输过程

在发送少量数据时$client->send都是可以立即返回的。发送大量数据时,socket缓存区可能会塞满,send操作会阻塞。

recv操作会阻塞等待服务器返回数据,recv耗时等于服务器处理时间+网络传输耗时之和。


启动服务

php server.php

启动客户端

php client.php
Server: hello world