กระบวนการพื้นฐาน

(ใช้ตัวอย่างเซิร์ฟเวอร์ห้องแชท 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