Những vấn đề mà nhà phát triển workerman cần biết

1. Giới hạn môi trường windows

Trong môi trường hệ thống windows, workerman chỉ hỗ trợ hơn 200 kết nối cho mỗi tiến trình đơn.
Trong môi trường hệ thống windows, không thể sử dụng tham số count để thiết lập đa tiến trình.
Trong môi trường hệ thống windows, không thể sử dụng các lệnh như status, stop, reload, restart.
Trong môi trường hệ thống windows, không thể chạy dưới dạng tiến trình daemon, khi đóng cửa sổ cmd, dịch vụ sẽ ngay lập tức dừng lại.
Trong môi trường hệ thống windows, không thể khởi tạo nhiều listener trong một tệp.
Môi trường hệ thống linux không có những giới hạn trên, khuyến nghị sử dụng hệ thống linux cho môi trường chính thức, còn môi trường phát triển có thể chọn hệ thống windows.

2. Workerman không phụ thuộc vào apache hoặc nginx

Workerman đã tự thân trở thành một container tương tự như apache/nginx, chỉ cần môi trường PHP OK là workerman có thể hoạt động.

3. Workerman được khởi động từ dòng lệnh

Phương thức khởi động tương tự như apache sử dụng lệnh để khởi động (thông thường không thể sử dụng workerman trên không gian web). Giao diện khởi động tương tự như hình dưới đây:

4. Kết nối dài hạn cần phải có heartbeat

Kết nối dài hạn cần phải có heartbeat, kết nối dài hạn cần phải có heartbeat, kết nối dài hạn cần phải có heartbeat, điều quan trọng cần nói ba lần.
Kết nối dài hạn không có giao tiếp trong thời gian dài có thể bị các nút định tuyến dọn dẹp dẫn đến việc ngắt kết nối.
Giải thích heartbeat của workermanGiải thích heartbeat của gatewayWorker

5. Giao thức giữa client và server nhất định phải tương ứng để có thể giao tiếp

Đây là một vấn đề rất phổ biến đối với nhà phát triển. Ví dụ, nếu client sử dụng giao thức websocket, server cũng phải sử dụng giao thức websocket (server new Worker('websocket://0.0.0.0...')) để có thể kết nối và giao tiếp.
Không nên cố gắng truy cập cổng giao thức websocket từ thanh địa chỉ trình duyệt, cũng không nên cố gắng sử dụng giao thức websocket để truy cập vào cổng giao thức tcp thuần. Giao thức nhất định phải tương ứng.

Nguyên lý ở đây tương tự như nếu bạn muốn giao tiếp với người Anh, bạn phải sử dụng tiếng Anh. Nếu bạn muốn giao tiếp với người Nhật, bạn phải sử dụng tiếng Nhật. Ở đây, ngôn ngữ tương tự như giao thức giao tiếp, cả hai bên (client và server) phải sử dụng cùng một ngôn ngữ để có thể giao tiếp, nếu không sẽ không thể kết nối.

6. Nguyên nhân có thể dẫn đến kết nối thất bại

Một vấn đề phổ biến khi bắt đầu sử dụng workerman là client kết nối với server thất bại. Nguyên nhân thường là:

  1. Tường lửa máy chủ (bao gồm cả nhóm bảo mật của máy chủ đám mây) ngăn chặn kết nối (50% khả năng đây là lý do).
  2. Giao thức được sử dụng giữa client và server không nhất quán (30% khả năng).
  3. Nhập sai ip hoặc cổng (15% khả năng).
  4. Server chưa khởi động.

7. Không sử dụng các câu lệnh exit die sleep

Việc thực thi câu lệnh exit die trong các hoạt động sẽ dẫn đến việc tiến trình thoát và hiển thị lỗi WORKER EXIT UNEXPECTED. Tất nhiên, tiến trình thoát sẽ ngay lập tức khởi động một tiến trình mới để tiếp tục phục vụ. Nếu cần trả về, có thể gọi return. Câu lệnh sleep sẽ khiến tiến trình vào trạng thái ngủ, và trong quá trình ngủ sẽ không thực hiện bất kỳ hoạt động nào, khung cũng sẽ ngừng hoạt động, dẫn đến tất cả các yêu cầu client của tiến trình đó không thể được xử lý.

8. Không sử dụng hàm pcntl_fork

pcntl_fork được sử dụng để tạo ra các tiến trình mới một cách động, nếu sử dụng pcntl_fork trong mã kinh doanh, nó có thể tạo ra các tiến trình con mồ côi không thể thu hồi, gây ra các trạng thái bất thường trong hoạt động kinh doanh. Sử dụng pcntl_fork trong hoạt động kinh doanh cũng sẽ ảnh hưởng đến việc xử lý các sự kiện như kết nối, tin nhắn, đóng kết nối, bộ đếm thời gian, dẫn đến các tình huống bất thường không thể đoán trước.

9. Trong mã kinh doanh không nên có vòng lặp vô hạn

Trong mã kinh doanh không nên có vòng lặp vô hạn, nếu không sẽ dẫn đến việc quyền kiểm soát không thể được trả lại cho khung workerman, dẫn đến không thể nhận và xử lý các tin nhắn từ các client khác.

10. Thay đổi mã cần phải khởi động lại

Workerman là một khung thường xuyên hoạt động trong bộ nhớ, vì vậy cần phải khởi động lại workerman để thấy được hiệu ứng của mã mới.

11. Ứng dụng kết nối dài hạn khuyên dùng khung GatewayWorker

Nhiều nhà phát triển sử dụng workerman để phát triển các ứng dụng kết nối dài hạn, chẳng hạn như nhắn tin tức thì, IoT, v.v., ứng dụng kết nối dài hạn khuyên dùng khung GatewayWorker, nó được đóng gói lại trên nền tảng workerman, giúp việc phát triển ứng dụng kết nối dài hạn trở nên đơn giản và dễ sử dụng hơn.

12. Hỗ trợ độ đồng thời cao hơn
Nếu số lượng kết nối đồng thời trong hoạt động vượt quá 1000, hãy chắc chắn tối ưu hóa nhân linuxcài đặt tiện ích mở rộng event.