ตัวอย่างการพัฒนาแบบง่าย
การติดตั้ง
ติดตั้ง 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 ในเบราว์เซอร์
หมายเหตุ:
-
หากพบปัญหาไม่สามารถเข้าได้ โปรดตรวจสอบตามหัวข้อ สาเหตุการเชื่อมต่อของไคลเอนต์ล้มเหลว
-
เซิร์ฟเวอร์เป็นโปรโตคอล 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);
};
หมายเหตุ:
-
หากพบปัญหาไม่สามารถเข้าได้ โปรดตรวจสอบตามหัวข้อ คำถามที่พบบ่อยในคู่มือ - การเชื่อมต่อล้มเหลว
-
เซิร์ฟเวอร์เป็นโปรโตคอล 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
หมายเหตุ:
-
หากพบปัญหาไม่สามารถเข้าได้ โปรดตรวจสอบตามหัวข้อ คำถามที่พบบ่อยในคู่มือ - การเชื่อมต่อล้มเหลว
-
เซิร์ฟเวอร์เป็นโปรโตคอล tcp ดิบ ไม่สามารถสื่อสารด้วยโปรโตคอลอื่น ๆ เช่น websocket, http ได้โดยตรง。