Swoole 中 TCP、UDP 和长连接、短连接

    技术2022-07-15  101

    TCP 服务

    swoole 文档 - TCP 服务

    tcp 服务端

    <?php // 1. 创建 swoole 默认创建的是一个同步的阻塞tcp服务 $host = "0.0.0.0"; // 0.0.0.0 代表接听所有 // 默认是tcp $serv = new Swoole\Server($host, 9000); // 添加配置 $serv->set([ 'heartbeat_idle_time' => 10, 'heartbeat_check_interval' => 3, ]); // 2. 注册事件 $serv->on('Start', function($serv) use($host){ echo "启动 swoole 监听的信息tcp:$host:9000\n"; }); //监听连接进入事件 $serv->on('Connect', function ($serv, $fd) { echo "Client: 连接成功.\n"; }); //监听数据接收事件 $serv->on('Receive', function ($serv, $fd, $from_id, $data) { $serv->send($fd, "Server: ".$data); }); //监听连接关闭事件 $serv->on('Close', function ($serv, $fd) { echo "断开连接.\n"; }); // 3. 启动服务器 // 阻塞 $serv->start(); // 阻塞与非阻塞

    这样就创建了一个 TCP 服务器,监听本机 9000 端口。

    然后先启动服务,然后再通过 telnet 命令去连接试试

    php swoole_tcp_server.php # 启动 swoole 监听的信息tcp:0.0.0.0:9000 telnet 127.0.0.1 9000 # Trying 127.0.0.1... # Connected to localhost.

    tcp 客户端

    <?php // 同步客户端 $client = new swoole_client(SWOOLE_SOCK_TCP); //连接到服务器 if (!$client->connect('127.0.0.1', 9000, 0.5)) { die("connect failed."); } function order() { sleep(4);// 假设某一些操作造成时间很长 return "order\n"; } //向服务器发送数据 if (!$client->send(order())) { die("send failed."); } //从服务器接收数据 $data = $client->recv(); if (!$data) { die("recv failed."); } //关闭连接 $client->close(); // 返回结果给用户 echo '订单生成成功'."\n";

    运行 tcp 客户端去连接服务端,假设处理需要时间,最后就会输出订单生成成功

    php swoole_tcp_client.php # 订单生成成功

    UDP 服务

    swoole 文档 - UDP 服务

    udp 服务端

    <?php //创建Server对象,监听 127.0.0.1:9000端口,类型为SWOOLE_SOCK_UDP $serv = new swoole_server("0.0.0.0", 9000, SWOOLE_PROCESS, SWOOLE_SOCK_UDP); //监听数据接收事件 $serv->on('Packet', function ($serv, $data, $clientInfo) { $serv->sendto($clientInfo['address'], $clientInfo['port'], "Server ".$data); var_dump($clientInfo); }); echo "0.0.0.0:9000\n"; //启动服务器 $serv->start();

    udp 客户端

    <?php $client = new swoole_client(SWOOLE_SOCK_UDP); $client->sendTo('127.0.0.1', 9000, 'upd'); // 接收服务端信息 $data = $client->recv(); var_dump($data);

    两种协议

    TCP(Transmission Control Protocol 传输控制协议):是一种面向连接的,可靠的,基于字节流的传输通信协议。 UDP(User Datagram Protocol 用户数据报协议):是一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。

    UDP 服务器与 TCP 服务器不同,UDP 没有连接的概念。启动 Server 后,客户端无需 Connect,直接可以向 Server 监听的 9502 端口发送数据包。

    长连接、短连接

    长连接: 客户端和服务端建立连接后不进行断开,之后客户端再次访问这个服务器上的内容时,继续使用这一条连接通道。短连接: 客户端和服务端建立连接,发送完数据后立马断开连接。下次要取数据,需要再次建立连接。

    Http长连接和TCP长连接的区别

    Http长连接 和 TCP长连接的区别在于: TCP 的长连接需要自己去维护一套心跳策略。,而Http只需要在请求头加入keep-alive:true即可实现长连接。

     

    我的官方群点击此处加入群聊【PHP/web/高级学习交流群】,一起学习,相互讨论。

    群内已经有管理将知识体系整理好(源码,学习视频等资料),欢迎加群免费领取。

    这套精品PHP教程绝不是市场上的那些妖艳贱货可比,作为web开发的佼佼者PHP并不逊色其他语言,加上Swoole后更加是如虎添翼!进军通信 、物联网行业开发百度地图、百度订单中心、虎牙、战旗TV等!寒冬裁员期过后正是各大企业扩大招人的时期,现在市场初级程序员泛滥,进阶中高级程序员绝对是各大企业急需的人才,这套学习教程适合那些1-5年以内的PHP开发者正处于瓶颈期,想要突破自己进阶中高级、架构师!名额有限,先到先得!

    腾讯T3-T4标准精品PHP架构师教程目录大全,只要你看完保证薪资上升一个台阶(持续更新)​

    部分资料截图:

     

     

     

     

    还有限时精品福利:

    ★腾讯高级PHP工程师笔试题目

    ★亿级PV高并发场景订单的处理

    ★laravel开发天猫商城组件服务

    ★战旗TV视频直播的架构项目实战

    扫描下面二维码领取

     

     

    对PHP后端技术,对PHP架构技术感兴趣的朋友,我的官方群点击此处,一起学习,相互讨论。

    群内已经有管理将知识体系整理好(源码,学习视频等资料),欢迎加群免费领取。

    本课程深度对标腾讯T3-T4标准,贴身打造学习计划为web开发人员进阶中高级、架构师提升技术,为自己增值涨薪!加入BAT特训营还可以获得内推大厂名额以及GO语言学习权限!!!

    Processed: 0.014, SQL: 9