ตัวอย่างการพัฒนาแบบง่าย

การติดตั้ง

ติดตั้ง workerman
ให้รันในไดเรกทอรีว่าง
composer require workerman/workerman

ตัวอย่างที่หนึ่ง ใช้ HTTP protocol ให้บริการเว็บ

สร้างไฟล์ start.php

<?php
use Workerman\Worker;
use Workerman\Connection\TcpConnection;
use Workerman\Protocols\Http\Request;
require_once __DIR__ . '/vendor/autoload.php';

// สร้าง Worker หนึ่งตัวที่ฟังบนพอร์ต 2345 โดยใช้โปรโตคอล http
$http_worker = new Worker("http://0.0.0.0:2345");

// เริ่มทำงาน 4 โปรเซสเพื่อให้บริการ
$http_worker->count = 4;

// เมื่อรับข้อมูลจากเบราว์เซอร์ ให้ตอบ hello world กลับไปยังเบราว์เซอร์
$http_worker->onMessage = function(TcpConnection $connection, Request $request)
{
    // ส่ง hello world ไปยังเบราว์เซอร์
    $connection->send('hello world');
};

// รัน worker
Worker::runAll();

รันจาก command line (ผู้ใช้ Windows ใช้ cmd command line)

php start.php start

ทดสอบ

สมมุติว่า ip ของเซิร์ฟเวอร์คือ 127.0.0.1

เข้าถึง URL http://127.0.0.1:2345 ในเบราว์เซอร์

หมายเหตุ:

  1. หากพบปัญหาไม่สามารถเข้าได้ โปรดตรวจสอบตามหัวข้อ สาเหตุการเชื่อมต่อของไคลเอนต์ล้มเหลว

  2. เซิร์ฟเวอร์เป็นโปรโตคอล http สามารถสื่อสารด้วยโปรโตคอล http เท่านั้น ไม่สามารถสื่อสารด้วยโปรโตคอลอื่น ๆ เช่น websocket ได้โดยตรง

ตัวอย่างที่สอง ใช้ WebSocket protocol ให้บริการ

สร้างไฟล์ ws_test.php

<?php
use Workerman\Worker;
use Workerman\Connection\TcpConnection;
require_once __DIR__ . '/vendor/autoload.php';

// หมายเหตุ:ที่นี่แตกต่างจากตัวอย่างก่อนหน้านี้ ใช้โปรโตคอล websocket
$ws_worker = new Worker("websocket://0.0.0.0:2000");

// เริ่มทำงาน 4 โปรเซสเพื่อให้บริการ
$ws_worker->count = 4;

// เมื่อได้รับข้อมูลจากไคลเอนต์ ให้ส่ง hello $data กลับไปยังไคลเอนต์
$ws_worker->onMessage = function(TcpConnection $connection, $data)
{
    // ส่ง hello $data ไปยังไคลเอนต์
    $connection->send('hello ' . $data);
};

// รัน worker
Worker::runAll();

รันจาก command line

php ws_test.php start

ทดสอบ

เปิดเบราว์เซอร์ Chrome กด F12 เพื่อเปิดคอนโซลพัฒนาซอฟต์แวร์ ในช่อง Console ให้พิมพ์ (หรือใส่โค้ดด้านล่างในหน้า HTML และรันด้วย js)

// สมมุติว่า ip ของเซิร์ฟเวอร์คือ 127.0.0.1
ws = new WebSocket("ws://127.0.0.1:2000");
ws.onopen = function() {
    alert("เชื่อมต่อสำเร็จ");
    ws.send('tom');
    alert("ส่งสตริงไปยังเซิร์ฟเวอร์:tom");
};
ws.onmessage = function(e) {
    alert("ได้รับข้อความจากเซิร์ฟเวอร์:" + e.data);
};

หมายเหตุ:

  1. หากพบปัญหาไม่สามารถเข้าได้ โปรดตรวจสอบตามหัวข้อ คำถามที่พบบ่อยในคู่มือ - การเชื่อมต่อล้มเหลว

  2. เซิร์ฟเวอร์เป็นโปรโตคอล websocket สามารถสื่อสารด้วยโปรโตคอล websocket เท่านั้น ไม่สามารถสื่อสารด้วยโปรโตคอลอื่น ๆ เช่น http ได้โดยตรง。

ตัวอย่างที่สาม ส่งข้อมูลโดยตรงผ่าน TCP

สร้างไฟล์ tcp_test.php

<?php
use Workerman\Worker;
use Workerman\Connection\TcpConnection;
require_once __DIR__ . '/vendor/autoload.php';

// สร้าง Worker หนึ่งตัวที่ฟังบนพอร์ต 2347 โดยไม่ใช้โปรโตคอลชั้นบนใด ๆ
$tcp_worker = new Worker("tcp://0.0.0.0:2347");

// เริ่มทำงาน 4 โปรเซสเพื่อให้บริการ
$tcp_worker->count = 4;

// เมื่อไคลเอนต์ส่งข้อมูลมา
$tcp_worker->onMessage = function(TcpConnection $connection, $data)
{
    // ส่ง hello $data ไปยังไคลเอนต์
    $connection->send('hello ' . $data);
};

// รัน worker
Worker::runAll();

รันจาก command line

php tcp_test.php start

ทดสอบ:รันจาก command line
(ซึ่งเป็นผลลัพธ์บน command line ของ linux อาจแตกต่างจากบน windows)

telnet 127.0.0.1 2347
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^>'.
tom
hello tom

หมายเหตุ:

  1. หากพบปัญหาไม่สามารถเข้าได้ โปรดตรวจสอบตามหัวข้อ คำถามที่พบบ่อยในคู่มือ - การเชื่อมต่อล้มเหลว

  2. เซิร์ฟเวอร์เป็นโปรโตคอล tcp ดิบ ไม่สามารถสื่อสารด้วยโปรโตคอลอื่น ๆ เช่น websocket, http ได้โดยตรง。