Swoole练习 TCP

TCP

<?php

$serv = new swoole_server("127.0.0.1", 9501);

//监听连接进入事件
$serv->on('connect', function ($serv, $fd) {
    echo "Client: Connect.\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();
?>

这里就创建了一个TCP服务器,监听本机9501端口。它的逻辑很简单,当客户端Socket通过网络发送一个 hello 字符串时,服务器会回复一个 Server: hello 字符串。

swoole_server是异步服务器,所以是通过监听事件的方式来编写程序的。当对应的事件发生时底层会主动回调指定的PHP函数。如当有新的TCP连接进入时会执行onConnect事件回调,当某个连接向服务器发送数据时会回调onReceive函数。

  • 服务器可以同时被成千上万个客户端连接,$fd就是客户端连接的唯一标识符
  • 调用 $server->send() 方法向客户端连接发送数据,参数就是$fd客户端标识符
  • 调用 $server->close() 方法可以强制关闭某个客户端连接
  • 客户端可能会主动断开连接,此时会触发onClose事件回调

 

打开另一个窗口链接

telnet 127.0.0.1 9501
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
wanghaipeng
Server: wanghaipeng

 正常返回

转载于:https://www.cnblogs.com/buxiangxin/p/8623175.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在ThinkPHP6中,如果你已经建立了Swoole TCP客户端的长连接,你可以在后续的请求中重复使用该连接进行通信。下面是一个简单的示例: 假设你已经建立了一个长连接并保存在某个全局变量中,可以在需要发送请求的地方使用该连接进行通信。 ```php <?php namespace app\controller; use Swoole\Coroutine\Client; class TcpClient { private $client; // 保存TCP客户端连接的变量 public function index() { // 首次发送请求,建立长连接 if (!$this->client) { $this->client = new Client(SWOOLE_SOCK_TCP); // 连接到服务器 if (!$this->client->connect('127.0.0.1', 9501, 0.5)) { return '连接服务器失败'; } } // 发送数据 $this->client->send('Hello, Server!'); // 接收服务器返回的数据 $response = $this->client->recv(); if ($response === false) { return '接收数据失败'; } // 发送第二个请求 $this->client->send('Hello again, Server!'); // 接收服务器返回的数据 $response2 = $this->client->recv(); if ($response2 === false) { return '接收数据失败'; } return [$response, $response2]; } public function __destruct() { // 在控制器销毁时关闭连接 if ($this->client) { $this->client->close(); } } } ``` 在上述示例中,我们在`index`方法中首次发送请求时建立了长连接,并将连接保存在`$this->client`变量中。然后,我们可以重复使用该连接发送请求并接收响应。在控制器销毁时,我们通过`__destruct`方法关闭连接。 请根据你的实际需求进行相应的修改和补充,确保长连接的正确使用和关闭。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值