加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

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

发布时间:2020-12-13 21:04:36 所属栏目:PHP教程 来源:网络整理
导读:TCP 服务 swoole 文档 - TCP 服务 tcp 服务端 ?php// 1. 创建 swoole 默认创建的是一个同步的阻塞tcp服务$host = "0.0.0.0"; // 0.0.0.0 代表接听所有// 默认是tcp$serv = new SwooleServer($host,9000);// 添加配置$serv-set([ 'heartbeat_idle_time' = 10

TCP 服务

swoole 文档 - TCP 服务

tcp 服务端

<?php
// 1. 创建 swoole 默认创建的是一个同步的阻塞tcp服务
$host = "0.0.0.0"; // 0.0.0.0 代表接听所有
// 默认是tcp
$serv = new SwooleServer($host,9000);
// 添加配置
$serv->set([
  'heartbeat_idle_time' => 10,'heartbeat_check_interval' => 3,]);
// 2. 注册事件
$serv->on('Start',function($serv) use($host){
    echo "启动 swoole 监听的信息tcp:$host:9000n";
});

//监听连接进入事件
$serv->on('Connect',function ($serv,$fd) {
    echo "Client: 连接成功.n";
});

//监听数据接收事件
$serv->on('Receive',$fd,$from_id,$data) {
    $serv->send($fd,"Server: ".$data);
});

//监听连接关闭事件
$serv->on('Close',$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 "ordern";
}

//向服务器发送数据
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",SWOOLE_PROCESS,SWOOLE_SOCK_UDP);

//监听数据接收事件
$serv->on('Packet',$data,$clientInfo) {
    $serv->sendto($clientInfo['address'],$clientInfo['port'],"Server ".$data);
    var_dump($clientInfo);
});
echo "0.0.0.0:9000n";
//启动服务器
$serv->start();

  

udp 客户端

<?php
$client = new swoole_client(SWOOLE_SOCK_UDP);
$client->sendTo('127.0.0.1','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即可实现长连接。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读