กระบวนการพื้นฐาน
(ใช้ตัวอย่างเซิร์ฟเวอร์ห้องแชท Websocket ที่เรียบง่าย)
1、สร้างไดเรกทอรีโปรเจกต์ในตำแหน่งใดก็ได้
เช่น SimpleChat/
เข้าไปในไดเรกทอรีและรัน composer require workerman/workerman
2、นำเข้าvendor/autoload.php (ไฟล์ที่สร้างขึ้นหลังจากติดตั้ง composer)
สร้างไฟล์ start.php และนำเข้าvendor/autoload.php
use Workerman\Worker;
use Workerman\Connection\TcpConnection;
require_once __DIR__ . '/vendor/autoload.php';
3、เลือกโปรโตคอล
ที่นี่เราจะเลือกโปรโตคอล Text (โปรโตคอลที่กำหนดเองใน Workerman โดยมีรูปแบบเป็นข้อความ + ขึ้นบรรทัดใหม่)
(ปัจจุบัน Workerman รองรับ HTTP, Websocket, และโปรโตคอล Text หากต้องการใช้โปรโตคอลอื่น กรุณาหาอ้างอิงในบทที่เกี่ยวกับโปรโตคอลเพื่อพัฒนาโปรโตคอลของคุณเอง)
4、เขียนสคริปต์เริ่มต้นตามที่ต้องการ
ตัวอย่างด้านล่างนี้คือไฟล์เริ่มต้นสำหรับห้องแชทง่าย ๆ
SimpleChat/start.php
<?php
use Workerman\Worker;
use Workerman\Connection\TcpConnection;
require_once __DIR__ . '/vendor/autoload.php';
$global_uid = 0;
// เมื่อไคลเอนต์เชื่อมต่อเข้ามา ให้จัดสรร uid และเก็บการเชื่อมต่อไว้ และแจ้งเตือนไคลเอนต์ทั้งหมด
function handle_connection($connection)
{
global $text_worker, $global_uid;
// จัดสรร uid ให้กับการเชื่อมต่อนี้
$connection->uid = ++$global_uid;
}
// เมื่อไคลเอนต์ส่งข้อความมา จะส่งต่อไปยังทุกคน
function handle_message(TcpConnection $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();
5、ทดสอบ
โปรโตคอล Text สามารถทดสอบด้วยคำสั่ง telnet
telnet 127.0.0.1 2347