โดยปกติแล้ว PHP ถูกออกแบบมาให้ทำงานแบบ Synchronous หรือแบบเรียงลำดับขั้นตอน หมายความว่าโปรแกรมต้องรอให้คำสั่งหนึ่งทำงานจนเสร็จ (เช่น การรอข้อมูลจาก Database) ก่อนจะไปทำคำสั่งถัดไปได้ ซึ่งอาจทำให้เกิดคอขวดในระบบที่มีผู้ใช้งานจำนวนมาก แต่ในปัจจุบันเรามีเครื่องมือที่ช่วยให้ PHP ทำงานแบบ Asynchronous ได้แล้วครับ
Asynchronous PHP คืออะไร?
หลักการของ Asynchronous คือการทำงานแบบ “ไม่ต้องรอ” (Non-blocking I/O) โปรแกรมสามารถส่งคำสั่งไปทำงานทิ้งไว้ แล้วไปทำคำสั่งอื่นต่อได้ทันที และเมื่อคำสั่งนั้นทำงานเสร็จสิ้น มันจะส่งผลลัพธ์กลับมาผ่าน Event Loop วิธีนี้ช่วยให้ PHP สามารถรองรับการเชื่อมต่อพร้อมกัน (Concurrency) ได้นับหมื่นรายการในเวลาเดียวกันครับ
เครื่องมือยอดนิยมในวงการ
- ReactPHP: เป็น Library ที่เขียนด้วย PHP ล้วน ๆ เน้นการสร้างระบบ Event-driven เหมาะสำหรับผู้ที่ต้องการเริ่มเรียนรู้เพราะไม่ต้องติดตั้ง Extension เพิ่มเติม
- Amp: คล้ายกับ ReactPHP แต่เน้นการใช้ฟีเจอร์ใหม่อย่าง Fibers ใน PHP 8.1 ทำให้การเขียนโค้ดดูเหมือน Synchronous แต่อ่านง่ายขึ้นมาก
- Swoole: เป็น C Extension ที่ทรงพลังที่สุดในปัจจุบัน มีประสิทธิภาพสูงมากเพราะรันอยู่ในระดับต่ำ (Low-level) และมีฟีเจอร์ครบวงจรทั้ง HTTP Server, WebSocket และ Coroutines
ตัวอย่างการสร้าง HTTP Server ด้วย Swoole
Swoole เปลี่ยน PHP จากการเป็นแค่ Script ที่รันผ่าน Apache/Nginx ให้กลายเป็น Application Server ในตัวมันเองได้เลยครับ:
PHP
use Swoole\Http\Server;
use Swoole\Http\Request;
use Swoole\Http\Response;
$server = new Server("0.0.0.0", 9501);
$server->on("Request", function (Request $request, Response $response) {
$response->header("Content-Type", "text/plain");
$response->end("Hello World from Swoole!");
});
echo "Swoole Server is started at http://127.0.0.1:9501\n";
$server->start();