swoole 高手之路
  • Introduction
  • 简介
  • 入门安装
    • php7 安装
    • swoole 安装
    • ide 提示工具安装
  • 原理概念
    • 需要掌握的基础知识
    • IO 模型
    • TCP 与 UDP
    • TCP 粘包处理
    • 同步 与 异步
    • 进程 与 线程
    • Swoole进程结构
    • swoole的运行模式
    • swoole编程注意事项
    • Socket原理
    • Libevent
  • swoole 基础
    • 网络通信引擎
      • 创建TCP服务器
      • 创建TCP客户端
      • 创建UDP服务器
      • 创建HTTP服务器
      • 创建websocket服务器
    • 异步非堵塞IO
      • 异步文件系统IO
      • 异步Mysql
      • 异步Redis
      • 异步Http/WebSocket客户端
    • 进程 内存 协程
      • swoole进程管理模块
      • swoole 内存操作模块
      • swoole 协程
    • Task进程异步任务
    • 毫秒定时器
  • swoole 高级特性
    • 心跳检测
    • 守护进程、信号和平滑重启
    • mysql连接池
  • swoole 其他
    • nginx+swoole
    • 结合传统框架
  • swoole RPC调用
  • 附录 : 其他资料
    • Zan Extension
    • 资料
Powered by GitBook
On this page
  • 同步客户端
  • 异步客户端
  • 其他

Was this helpful?

  1. swoole 基础
  2. 网络通信引擎

创建TCP客户端

Previous创建TCP服务器Next创建UDP服务器

Last updated 5 years ago

Was this helpful?

建议先阅读官方文档的以下章节.

在PHP中,我们常用socket函数来创建TCP连接,用CURL库来创建Http连接。同样的,为了简化操作,Swoole也提供了同样的Client类用于实现客户端的功能,并且增加了异步非阻塞的模式,让用户在客户端也能使用事件循环。

同步客户端

// 创建一个同步非阻塞客户端tcp socket
// 第一个参数是表示socket的类型,有下面四种类型选择,这里选则tcp socket就好
/*
SWOOLE_SOCK_TCP 创建tcp socket
SWOOLE_SOCK_TCP6 创建tcp ipv6 socket
SWOOLE_SOCK_UDP 创建udp socket
SWOOLE_SOCK_UDP6 创建udp ipv6 socket
*/

// 第二个参数是同步还是异步
/*
SWOOLE_SOCK_SYNC 同步客户端
SWOOLE_SOCK_ASYNC 异步客户端
*/

$client = new swoole_client(SWOOLE_SOCK_TCP, SWOOLE_SOCK_SYNC);

// 随后建立连接,连接失败直接退出并打印错误码
$client->connect('127.0.0.1', 9501) || exit("connect failed. Error: {$client->errCode}\n");

//向服务端发送数据
$client->send("我要连接服务器");

//从服务端接收数据
$response = $client->recv();

// 输出接受到的数据
echo $response . PHP_EOL;

// 关闭连接
$client->close();

同步client是同步阻塞的。一整套connect->send()->rev()->close()是同步进行的。如果需要大量的数据处理,后台不能在规定的时间内返回数据会导致接收超时,并且因为是同步执行所以需要等待后台数据的返回。

异步客户端

<?php

//异步tcp客户端

$client = new swoole_client(SWOOLE_SOCK_TCP, SWOOLE_SOCK_ASYNC);

//连接服务端
$client->on("connect", function(swoole_client $cli) {
        $cli->send("异步客户端数据");
});

//接收到服务端发送的消息时触发的
$client->on('receive', function ($cli, $data) {
         echo $data;
});

$client->on('error', function ($cli) {
});

//监听连接关闭事件,客服端关闭,或者服务器主动关闭
$client->on('close', function ($cli) {

});

//先绑定事件之后随后建立连接,连接失败直接退出并打印错误码
$client->connect('127.0.0.1', 9501) || exit("connect failed. Error: {$client->errCode}\n");

其他

什么是网络协议?

网络协议为计算机网络中进行数据交换而建立的规则、标准或约定的集合

swoole_client的构造函数如下所示:

swoole_client->__construct($sock_type,SWOOLE_SOCK_SYNC, $key);

默认的swoole的server是可以提供tcp/udp , socket请求协议,然后根据请求数据,执行相应的逻辑

第一个参数:

  • SWOOLE_SOCK_TCP 创建tcp socket

  • SWOOLE_SOCK_TCP6 创建tcp ipv6 socket

  • SWOOLE_SOCK_UDP 创建udp socket

  • SWOOLE_SOCK_UDP6 创建udp ipv6 socket

第二个参数表示是同步还是异步

  • SWOOLE_SOCK_SYNC 同步客户端

  • SWOOLE_SOCK_ASYNC 异步客户端

第三个参数

用于长连接的Key,默认使用IP:PORT作为key。相同key的连接会被复用.

创建同步TCP客户端
创建异步TCP客户端