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(); // 阻塞与非阻塞
これにより、マシンのポート9000をリッスンするTCPサーバーが作成されます。
次に、最初にサービスを開始し、次に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サービス
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);
2つの合意
TCP(Transmission Control Protocol):接続指向で信頼性の高い、バイトストリームベースの伝送通信プロトコルです。
UDP(ユーザーデータグラムプロトコル):トランザクション指向のシンプルで信頼性の低い情報送信サービスを提供するコネクションレス型トランスポート層プロトコルです。
UDPサーバーはTCPサーバーとは異なり、UDPには接続の概念がありません。サーバーの起動後、クライアントは接続する必要がなく、サーバーが監視する9502ポートにデータパケットを直接送信できます。
長い接続、短い接続
- 長い接続:接続が確立された後、クライアントとサーバーは切断されません。クライアントがサーバーのコンテンツに再度アクセスした後、クライアントは引き続きこの接続チャネルを使用します。
- 短い接続:クライアントとサーバーは接続を確立し、データの送信後すぐに切断します。次にデータをフェッチするときは、接続を再度確立する必要があります。
Httpロング接続とTCPロング接続の違い
Httpロング接続とTCPロング接続の違いは次のとおりです。TCPロング接続は、一連のハートビート戦略を維持する必要があります。、そしてHttpはkeep-alive:true
、長い接続を実現するために要求ヘッダーに追加する必要があるだけです。
私の公式グループは、ここをクリックしてグループチャット[PHP / web / advanced learning exchange group]に参加し、一緒に学び、互いに話し合います。
グループはすでにナレッジシステム(ソースコード、学習ビデオなど)を整理することに成功しています。グループに参加して無料で受け取ることを歓迎します。
この高品質のPHPチュートリアルのセットは、市場に出回っているコケティッシュな野郎に匹敵するものではありません。Web開発のリーダーとして、PHPは他の言語に劣らず、Swooleを追加するとさらに強力になります。通信とモノのインターネット業界に参入して、Baidu Maps、Baidu Order Center、Huya、Zhanqi TVなどを開発してください!寒い冬のレイオフ期間後は、大手企業が採用を拡大する期間です。現在、市場にはジュニアプログラマーが殺到しています。上級ミドルプログラマーとシニアプログラマーは、間違いなく主要企業が緊急に必要とする才能です。この学習チュートリアルセットは、1〜5年以内のPHPに適しています。開発者はボトルネックの時期にあり、上級中年の建築家を打ち破りたいと思っています!数に限りがあり、先着順です!
Tencent T3-T4標準ブティックPHPアーキテクトチュートリアルカタログ(給与がより高いレベルに上がることを確認するためにそれを読んでいる限り(継続的な更新))
部分的なデータのスクリーンショット:
期間限定のプレミアム特典:
★Tencent上級PHPエンジニアによるテスト問題の記述
★10億レベルのPV高並行性シナリオの注文の処理
★LaravelがTmallコンポーネントサービスを開発
★Zhanqi TVビデオライブブロードキャストアーキテクチャプロジェクト実際の戦闘
以下のQRコードをスキャンして受け取ります
PHPバックエンドテクノロジーとPHPアーキテクチャテクノロジーに興味がある友達は、ここをクリックして私の公式グループが一緒に学び、お互いに議論してください。
グループはすでにナレッジシステム(ソースコード、学習ビデオなど)を整理することに成功しています。無料で受け取るためにグループに参加することを歓迎します。
このコースは、Tencent T3-T4標準を使用した詳細なベンチマークであり、Web開発者が中高生レベルに進み、アーキテクトがスキルを向上させ、給与を増やすための個人的な学習計画を作成します。BAT特別トレーニングキャンプに参加すると、内部プロモーションの割り当てとGO言語学習の許可も取得できます。!!