Đặc điểm của Workerman

1. Phát triển hoàn toàn bằng PHP

Các ứng dụng được phát triển bằng Workerman có thể hoạt động độc lập mà không phụ thuộc vào php-fpm, apache, nginx và các container khác. Điều này giúp cho các nhà phát triển PHP dễ dàng phát triển, triển khai và gỡ lỗi ứng dụng.

2. Hỗ trợ đa tiến trình PHP

Để tận dụng tối đa hiệu suất của nhiều CPU trên máy chủ, Workerman hỗ trợ đa tiến trình và đa nhiệm theo mặc định. Workerman khởi động một tiến trình chính và nhiều tiến trình con để cung cấp dịch vụ. Tiến trình chính có nhiệm vụ giám sát các tiến trình con, trong khi các tiến trình con tự mình lắng nghe kết nối mạng và nhận, gửi và xử lý dữ liệu. Mô hình tiến trình đơn giản khiến Workerman trở nên ổn định và hiệu quả hơn.

3. Hỗ trợ TCP và UDP

Workerman hỗ trợ hai giao thức tầng truyền tải là TCP và UDP. Chỉ cần thay đổi một thuộc tính là có thể chuyển đổi giao thức tầng truyền tải mà không cần thay đổi mã nguồn ứng dụng.

4. Hỗ trợ kết nối lâu dài

Nhiều khi cần thiết để ứng dụng PHP duy trì kết nối lâu dài với khách hàng, như trong phòng chat, trò chơi, v.v. Tuy nhiên, các container PHP truyền thống (apache, nginx, php-fpm) khó có thể làm điều này. Bằng cách sử dụng Workerman, miễn là dịch vụ phía máy chủ không chủ động gọi giao diện đóng kết nối, có thể sử dụng kết nối dài bằng PHP. Một tiến trình của Workerman có thể hỗ trợ hàng ngàn kết nối đồng thời, trong khi đa tiến trình có thể hỗ trợ hàng trăm nghìn hoặc thậm chí hàng triệu kết nối đồng thời.

5. Hỗ trợ nhiều giao thức tầng ứng dụng

Workerman hỗ trợ nhiều giao thức tầng ứng dụng khác nhau, bao gồm cả giao thức tùy chỉnh. Thay đổi giao thức trong Workerman cũng rất đơn giản, chỉ cần cấu hình một trường, giao thức sẽ tự động chuyển đổi mà không cần sửa đổi mã nguồn, thậm chí có thể mở nhiều cổng khác nhau cho các giao thức khác nhau để đáp ứng nhu cầu của các khách hàng khác nhau.

6. Hỗ trợ chịu tải cao

Workerman hỗ trợ thư viện vòng lặp sự kiện Libevent (cần cài đặt tiện ích mở rộng event). Việc sử dụng Event trong trường hợp kết nối lâu dài và có tải cao cho hiệu suất rất xuất sắc. Nếu không cài đặt tiện ích mở rộng Event, Workerman sẽ sử dụng các cuộc gọi hệ thống Select sẵn có trong PHP, hiệu suất cũng rất mạnh mẽ.

7. Hỗ trợ khởi động lại dịch vụ mềm

Khi cần khởi động lại dịch vụ (ví dụ khi phát hành phiên bản), chúng ta không muốn các tiến trình đang xử lý yêu cầu của người dùng bị dừng ngay lập tức, và cũng không muốn thời điểm khởi động lại dẫn đến thất bại trong giao tiếp với khách hàng. Workerman cung cấp chức năng khởi động lại mềm, đảm bảo dịch vụ nâng cấp mà không ảnh hưởng đến việc sử dụng của khách hàng.

8. Hỗ trợ phát hiện cập nhật tệp và tải tự động

Trong quá trình phát triển, chúng ta muốn thay đổi mã lập tức có hiệu lực để xem kết quả. Workerman cung cấp FileMonitor组件, chỉ cần có cập nhật tệp, Workerman sẽ tự động chạy reload để tải các tệp mới, làm cho chúng có hiệu lực.

9. Hỗ trợ chạy tiến trình con với người dùng chỉ định

Bởi vì tiến trình con là tiến trình thực hiện xử lý yêu cầu của người dùng, để đảm bảo an toàn, tiến trình con không nên có quyền hạn quá cao. Vì vậy, Workerman hỗ trợ thiết lập người dùng cho tiến trình con hoạt động, giúp máy chủ của bạn an toàn hơn.

10. Hỗ trợ duy trì đối tượng hoặc tài nguyên vĩnh viễn

Trong quá trình chạy, Workerman chỉ tải và phân tích một lần tệp PHP, sau đó sẽ giữ nó trong bộ nhớ, điều này có nghĩa là khai báo lớp và hàm, môi trường thực thi PHP, bảng ký hiệu, v.v. sẽ không bị tạo ra và hủy đi nhiều lần, điều này hoàn toàn khác với cơ chế PHP chạy trong container Web. Trong Workerman, thành viên tĩnh hoặc biến toàn cục trong vòng đời của một tiến trình sẽ được giữ vĩnh viễn, nếu không bị phá hủy chủ động. Điều này có nghĩa là tất cả các yêu cầu trong suốt vòng đời của tiến trình hiện tại có thể tái sử dụng các đối tượng hoặc tài nguyên như kết nối. Ví dụ, chỉ cần khởi tạo một kết nối cơ sở dữ liệu trong một tiến trình, thì tất cả các yêu cầu của tiến trình đó về sau đều có thể tái sử dụng kết nối cơ sở dữ liệu này, tránh được quá trình bắt tay TCP ba lần, xác thực quyền của cơ sở dữ liệu và quá trình bắt tay TCP bốn lần khi ngắt kết nối, điều này tăng hiệu suất ứng dụng lên rất nhiều.

11. Hiệu suất cao

Bởi vì tệp PHP sẽ được đọc và phân tích từ đĩa một lần và sau đó sẽ ở lại trong bộ nhớ, lần sử dụng tiếp theo sẽ trực tiếp sử dụng opcode trong bộ nhớ, điều này giảm thiểu đáng kể I/O đĩa và nhiều quá trình tốn thời gian như khởi tạo yêu cầu trong PHP, tạo môi trường thực thi, phân tích từ vựng, phân tích cú pháp, biên dịch opcode, đóng yêu cầu, v.v. Hơn nữa, không phụ thuộc vào các container như nginx, apache, nên giảm được chi phí giao tiếp giữa nginx và PHP. Điều quan trọng nhất là tài nguyên có thể được giữ vĩnh viễn, không cần khởi tạo lại kết nối cơ sở dữ liệu mỗi lần, do đó, việc phát triển ứng dụng bằng Workerman đạt hiệu suất rất cao.

12. Hỗ trợ HHVM

Hỗ trợ chạy trên máy ảo HHVM, có thể nâng cao hiệu suất PHP gấp nhiều lần. Đặc biệt là trong các tác vụ tính toán yêu cầu CPU cao, hiệu suất rất xuất sắc. Qua các bài kiểm tra áp lực thực tế, so sánh cho thấy, trong trường hợp không có tải công việc, Workerman chạy trên HHVM đạt được lưu lượng mạng cao hơn khoảng 30-80% so với chạy trên Zend PHP5.6.

13. Hỗ trợ triển khai phân tán

14. Hỗ trợ vận hành như một tiến trình daemons

15. Hỗ trợ lắng nghe trên nhiều cổng

16. Hỗ trợ chuyển hướng đầu vào và đầu ra chuẩn