ตัวอย่างการพัฒนาที่ง่าย
การติดตั้ง
ติดตั้ง Workerman
ในไดเรกทอรีว่าง ๆ รัน
composer require workerman/workerman
ตัวอย่าง 1: ให้บริการเว็บผ่านโปรโตคอล HTTP
สร้างไฟล์ 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
หมายเหตุ:
- ถ้าไม่สามารถเข้าถึงได้ ให้ดูที่ เหตุผลที่เกิดจากการเชื่อมต่อล้มเหลวของไคลเอ็นต์ เพื่อตรวจสอบ
- เซิร์ฟเวอร์เป็นโปรโตคอล http เท่านั้น ไม่สามารถใช้โปรโตคอล websocket หรือโปรโตคอลอื่นได้โดยตรง
ตัวอย่างที่ 2: ให้บริการผ่านโปรโตคอล WebSocket
สร้างไฟล์ 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 เข้าใช้ JavaScript)
// สมมติว่า 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);
};
หมายเหตุ:
- ถ้าไม่สามารถเข้าถึงได้ ให้ดูที่ ข้อผิดพลาดที่พบบ่อยในคู่มือ-การเชื่อมต่อล้มเหลวของไคลเอ็นต์ เพื่อตรวจสอบ
- เซิร์ฟเวอร์เป็นโปรโตคอล websocket เท่านั้น ไม่สามารถใช้โปรโตคอล HTTP หรือโปรโตคอลอื่นได้โดยตรง
ตัวอย่างที่ 3: การใช้ 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 แต่ละระบบอาจมีความแตกต่าง)
telnet 127.0.0.1 2347
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
tom
hello tom
หมายเหตุ:
- ถ้าไม่สามารถเข้าถึงได้ ให้ดูที่ ข้อผิดพลาดที่พบบ่อยในคู่มือ-การเชื่อมต่อล้มเหลวของไคลเอ็นต์ เพื่อตรวจสอบ
- เซิร์ฟเวอร์เป็นโปรโตคอล tcp ดั้งย่อ ไม่สามารถใช้โปรโตคอล websocket หรือโปรโตคอล http หรือโปรโตคอลอื่นได้โดยตรง