🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
>[danger] 长短连接 任何需要从服务器中获取数据都是需要建立连接的,并且建立连接均会有资源消耗,关闭连接则释放资源。 * **短链接:** 一次连接一次交互,简称一次性 * 场景:web网页、ajax、http * **长连接:** 一次连接多次交互,简称连绵不绝 * 场景:QQ微信聊天、直播、rpc远程通讯 >[danger] 长连接 * **客户端代码** ~~~ <?php // 实例化客户端 $client = new Swoole\Client(SWOOLE_SOCK_TCP); // 建立连接 if (!$client->connect('127.0.0.1', 9503, -1)) { exit("connect failed. Error: {$client->errCode}\n"); } // 发送 $client->send("hello world\n"); // 获取服务端数据 echo $client->recv(); // 定时 sleep(1); // 发送 $client->send("hello world\n"); // 获取服务端数据 echo $client->recv(); // 定时 sleep(1); // 发送 $client->send("hello world\n"); // 获取服务端数据 echo $client->recv(); # 注:客户端代码执行完也会断开 // 关闭 //$client->close(); ~~~ * **服务端代码** ~~~ <?php echo swoole_get_local_ip()['ens33'] . ':9503' . PHP_EOL; // 实例化swoole 服务端 $server = new Swoole\Server("0.0.0.0", 9503); // 连接 $server->on('connect', function ($server, $fd){ echo "connection open: {$fd}\n"; }); // 消息 $server->on('receive', function ($server, $fd, $reactor_id, $data) { $server->send($fd, "Swoole: {$data}"); // $server->close($fd); }); // 关闭 $server->on('close', function ($server, $fd) { echo "connection close: {$fd}\n"; }); // 打开 $server->start(); ~~~ * **执行效果** 1. 开启服务端监听 ![](https://img.kancloud.cn/10/c3/10c308523fb2e2bcce7f0b9af46a4db8_513x262.png) 2. 客户端执行 ![](https://img.kancloud.cn/ea/39/ea39bfdf3f8e654e1185e887884da959_402x89.png) 3. 使用常量 **SWOOLE_KEEP** 长连接 ~~~ <?php // 实例化客户端 SWOOLE_KEEP:长连接(web) $client = new Swoole\Client(SWOOLE_SOCK_TCP | SWOOLE_KEEP); // 建立连接 if (!$client->connect('127.0.0.1', 9503, -1)) { exit("connect failed. Error: {$client->errCode}\n"); } // 发送 $client->send("hello world\n"); // 获取服务端数据 echo $client->recv(); // 关闭 //$client->close(); ~~~ * 客户端访问 ![](https://img.kancloud.cn/7a/ca/7aca6c881fb9f2be88515a23d8ff2715_742x268.png) * 服务器端并未断开 ![](https://img.kancloud.cn/b2/14/b2147dbdae5e884085c665607ee1c0e4_469x232.png)