0002 workermanの公式サイトのテスト例に対する分析
4022 ワード
これは0001の公式サイトの例で、導入部分は話さない.
まず次の段落を見てください.
workermanは1つのポートをリスニングするので、ポートに対するリスニングクラス、すなわちWorkerを作成する必要がありますが、クラス自体は抽象的で、このクラスをインスタンス化する必要があります.$text_ワークオブジェクトがあるので
次の操作では、Workerクラスには関心がなく、$text_にのみ関心があります.workerオブジェクト、$text_workerオブジェクトのメソッドはWorkerクラスから来ています.
workermanは同じプロセスでしかデータを転送できないため、テストを容易にするために1つのプロセスしか起動しません.
workermanに対して配置してから起動して、この言葉は固定して、現在検討する意義は大きくありません
これらは固定された部分だと言えますが、気にしなくてもいいです.では、次は、この3つの場所を重点的に見てみましょう.
注記:Workerのインスタンス化オブジェクト$text_を与えたことがわかります.worker、それではこのオブジェクトには必ず方法があります.彼は3つの方法があります.リンク、データの転送、接続を閉じ、それぞれonConnect、onMessage、onCloseに対応しています.onConnect,onMessage,onCloseはそれぞれ1つの方法handle_に対応していることがわかります.connection,handle_message,handle_closeのこれらの方法はtest 001で実現する.phpの中
接続部分だけでは、クライアントが接続されたばかりのときに記録操作が必要です.
グローバルな$global_を初期化したことがわかりますuidは、各接続($connection)が接続されると、この接続にid番号が割り当てられます.このid番号は便利にするためにグローバル変数が1増加します.
クライアントがデータを送信したり、サービス側がデータを送信したりする場合、次の操作が必要です.つまり、初歩的な学習では、ビジネスロジックの一部は実際には「handle_message()」という方法で実現できます.
$text_workerサービス側には、接続されているすべてのクライアントの情報が含まれているので、$text_を巡回します.workerのconnections、つまり接続されたクライアントはsendメソッドで1つずつ送信すると、すべてのクライアントメッセージにブロードキャストでき、handle_Message($connection,$data)この中の$connectionはメッセージを送信するクライアントであり、$dataはクライアントから送信されるデータである
接続を閉じてしばらく見ないで、放送する例は多くなくて、ここまで、私達の1つの粗末なチャットのツールは分析して終わります
uid = ++$global_uid;
}
// ,
function handle_message($connection, $data)
{
global $text_worker;
foreach($text_worker->connections as $conn)
{
$conn->send("user[{$connection->uid}] said: $data");
}
}
// ,
function handle_close($connection)
{
global $text_worker;
foreach($text_worker->connections as $conn)
{
$conn->send("user[{$connection->uid}] logout");
}
}
// Worker 2347
$text_worker = new Worker("text://0.0.0.0:2347");
// 1 ,
$text_worker->count = 1;
$text_worker->onConnect = 'handle_connection';
$text_worker->onMessage = 'handle_message';
$text_worker->onClose = 'handle_close';
Worker::runAll();
まず次の段落を見てください.
// Worker 2347
$text_worker = new Worker("text://0.0.0.0:2347");
// 1 ,
$text_worker->count = 1;
$text_worker->onConnect = 'handle_connection';
$text_worker->onMessage = 'handle_message';
$text_worker->onClose = 'handle_close';
Worker::runAll();
workermanは1つのポートをリスニングするので、ポートに対するリスニングクラス、すなわちWorkerを作成する必要がありますが、クラス自体は抽象的で、このクラスをインスタンス化する必要があります.$text_ワークオブジェクトがあるので
// Worker 2347
$text_worker = new Worker("text://0.0.0.0:2347");
次の操作では、Workerクラスには関心がなく、$text_にのみ関心があります.workerオブジェクト、$text_workerオブジェクトのメソッドはWorkerクラスから来ています.
workermanは同じプロセスでしかデータを転送できないため、テストを容易にするために1つのプロセスしか起動しません.
// 1 ,
$text_worker->count = 1;
workermanに対して配置してから起動して、この言葉は固定して、現在検討する意義は大きくありません
Worker::runAll();
これらは固定された部分だと言えますが、気にしなくてもいいです.では、次は、この3つの場所を重点的に見てみましょう.
$text_worker->onConnect = 'handle_connection';//
$text_worker->onMessage = 'handle_message';//
$text_worker->onClose = 'handle_close';// /
注記:Workerのインスタンス化オブジェクト$text_を与えたことがわかります.worker、それではこのオブジェクトには必ず方法があります.彼は3つの方法があります.リンク、データの転送、接続を閉じ、それぞれonConnect、onMessage、onCloseに対応しています.onConnect,onMessage,onCloseはそれぞれ1つの方法handle_に対応していることがわかります.connection,handle_message,handle_closeのこれらの方法はtest 001で実現する.phpの中
function handle_connection($connection)
{
global $text_worker, $global_uid;
// uid
$connection->uid = ++$global_uid;
}
// ,
function handle_message($connection, $data)
{
global $text_worker;
foreach($text_worker->connections as $conn)
{
$conn->send("user[{$connection->uid}] said: $data");
}
}
// ,
function handle_close($connection)
{
global $text_worker;
foreach($text_worker->connections as $conn)
{
$conn->send("user[{$connection->uid}] logout");
}
}
接続部分だけでは、クライアントが接続されたばかりのときに記録操作が必要です.
$global_uid = 0;//
function handle_connection($connection)
{
global $text_worker, $global_uid;
// uid
$connection->uid = ++$global_uid;
}
グローバルな$global_を初期化したことがわかりますuidは、各接続($connection)が接続されると、この接続にid番号が割り当てられます.このid番号は便利にするためにグローバル変数が1増加します.
クライアントがデータを送信したり、サービス側がデータを送信したりする場合、次の操作が必要です.つまり、初歩的な学習では、ビジネスロジックの一部は実際には「handle_message()」という方法で実現できます.
function handle_message($connection, $data)
{
global $text_worker;
foreach($text_worker->connections as $conn)
{
$conn->send("user[{$connection->uid}] said: $data");
}
}
$text_workerサービス側には、接続されているすべてのクライアントの情報が含まれているので、$text_を巡回します.workerのconnections、つまり接続されたクライアントはsendメソッドで1つずつ送信すると、すべてのクライアントメッセージにブロードキャストでき、handle_Message($connection,$data)この中の$connectionはメッセージを送信するクライアントであり、$dataはクライアントから送信されるデータである
接続を閉じてしばらく見ないで、放送する例は多くなくて、ここまで、私達の1つの粗末なチャットのツールは分析して終わります