Vai trò của giao thức truyền thông
Do TCP dựa trên luồng, dữ liệu yêu cầu mà khách hàng gửi giống như dòng nước chảy vào máy chủ, máy chủ cần kiểm tra xem dữ liệu đã đến đầy đủ chưa sau khi phát hiện có dữ liệu đến, vì có thể chỉ có một phần dữ liệu yêu cầu đến máy chủ, thậm chí có thể là nhiều yêu cầu nối tiếp nhau đến máy chủ. Để xác định xem yêu cầu đã đầy đủ hay chưa hoặc để tách riêng các yêu cầu đang nối lại với nhau, cần phải quy định một bộ giao thức truyền thông.
Tại sao lại cần quy định giao thức trong Workerman?
Phát triển PHP truyền thống hầu hết dựa trên web, chủ yếu sử dụng giao thức HTTP, việc phân tích và xử lý giao thức HTTP đều do WebServer đảm nhận, vì vậy các nhà phát triển sẽ không quan tâm đến các vấn đề liên quan đến giao thức. Tuy nhiên, khi chúng ta cần phát triển dựa trên giao thức không phải HTTP, các nhà phát triển sẽ cần xem xét các vấn đề về giao thức.
Các giao thức đã được hỗ trợ bởi Workerman
Hiện tại Workerman đã hỗ trợ các giao thức HTTP, websocket, giao thức text (xem phần chú thích), giao thức frame (xem phần chú thích), giao thức ws (xem phần chú thích). Khi cần truyền thông dựa trên các giao thức này có thể sử dụng trực tiếp với phương pháp: chỉ định giao thức khi khởi tạo Worker, ví dụ
use Workerman\Worker;
use Workerman\Connection\TcpConnection;
require_once __DIR__ . '/vendor/autoload.php';
// websocket://0.0.0.0:2345 biểu thị lắng nghe cổng 2345 bằng giao thức websocket
$websocket_worker = new Worker('websocket://0.0.0.0:2345');
// giao thức text
$text_worker = new Worker('text://0.0.0.0:2346');
// giao thức frame
$frame_worker = new Worker('frame://0.0.0.0:2347');
// tcp Worker, truyền tải trực tiếp dựa trên socket, không sử dụng giao thức ứng dụng nào
$tcp_worker = new Worker('tcp://0.0.0.0:2348');
// udp Worker, không sử dụng giao thức ứng dụng nào
$udp_worker = new Worker('udp://0.0.0.0:2349');
// unix domain Worker, không sử dụng giao thức ứng dụng nào
$unix_worker = new Worker('unix:///tmp/wm.sock');
Sử dụng giao thức truyền thông tùy chỉnh
Khi các giao thức truyền thông tích hợp sẵn của Workerman không đáp ứng được yêu cầu phát triển, các nhà phát triển có thể tùy chỉnh giao thức truyền thông của riêng mình, cách tùy chỉnh xem trong phần tiếp theo.
Lưu ý:
Workerman tích hợp sẵn một giao thức text, định dạng giao thức là văn bản + ký tự xuống dòng. Giao thức text rất đơn giản để phát triển và gỡ lỗi, có thể được sử dụng cho hầu hết các tình huống giao thức tùy chỉnh, và hỗ trợ gỡ lỗi bằng telnet. Nếu nhà phát triển muốn phát triển giao thức ứng dụng của riêng mình, có thể trực tiếp sử dụng giao thức text mà không cần phát triển riêng biệt.
Giải thích về giao thức text tham khảo trong 《Phụ lục Phần Giao thức Text》.