1.服務器端程式代碼
tcp_server.php
<?php
///創建Server物件,監聽 127.0.0.1:9501埠
$serv = new swoole_server("127.0.0.1", 9501);
$serv->set([
'worker_num' => 4, // worker 行程數,cpu的1-4倍
'max_request'=> 10000
]);
// 命令列查看server開啟的worker數
// 如果當前檔案名為 tcp_server.php, 則 ps aft | grep tcp_server.php
//監聽連接進入事件
$serv->on('connect', function ($serv, $fd) {
echo "Client: fd:{$fd} Connect.\n";
});
//監聽資料接收事件
$serv->on('receive', function ($serv, $fd, $from_id, $data) {
$serv->send($fd, "Server: fd:{$fd} data:{$data}");
});
//監聽連接關閉事件
$serv->on('close', function ($serv, $fd) {
echo "Client: fd:{$fd} Close.\n";
});
//啟動服務器
$serv->start();
2.客戶端程式代碼
tcp_client.php
<?php
/**
* 創建同步阻塞模式下的TCP客戶端
* 同步阻塞模式下connect/send/recv會等待IO完成后再回傳,服務端回傳后才會向下執行,
* 同步阻塞模式下并不會消耗CPU資源,IO操作未完成當前行程會自動轉入sleep模式,
* 當IO完成后作業系統會喚醒當前行程,繼續向下執行代碼,
*/
$client = new swoole_client(SWOOLE_TCP);
//連接到服務器
$host = "127.0.0.1";
$port = 9501;
$timeout = 1; //超過與服務器互動的超時秒數會自動斷開
if (!$client->connect($host, $port, $timeout)) {
die("[connect] failed" . PHP_EOL);
}
//發送資料
$message = "hello world";
if (!$client->send($message)) {
die("[send] failed" . PHP_EOL);
}
//接收資料
if (!$data = https://www.cnblogs.com/WebLinuxStudy/p/$client->recv()) {
die("[recv] failed" . PHP_EOL);
}
echo $data . PHP_EOL;
//關閉連接
$client->close();
3.服務器端執行程式
php tcp_server.php
在命令列下運行 php tcp_server.php 程式,啟動成功后可以使用 netstat -an | grep 9501 看到,已經在監聽 9501 埠,
4.客戶端執行程式
php tcp_client.php
5.服務器端執行結果
Client: fd:1 Connect.
Client: fd:1 Close.
6.客戶端執行結果
Server: fd:1 data:hello world
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/45126.html
標籤:PHP
上一篇:Mac安裝PHP運行環境
下一篇:PHP錯誤:SQLSTATE[HY000] [2054] The server requested authentication method unknown to the client
