Mục lục
ToggleBạn có thể sử dụng mkcert để tạo chứng chỉ SSL và thiết lập CA tại môi trường phát triển cục bộ của bạn.
mkcert -install # Created a new local CA 💥 # The local CA is now installed in the system trust store! ⚡️ # The local CA is now installed in the Firefox trust store (requires browser restart)! 🦊 mkcert example.com "*.example.com" example.test localhost 127.0.0.1 ::1 #Created a new certificate valid for the following names 📜 # - "example.com" # - "*.example.com" # - "example.test" # - "localhost" # - "127.0.0.1" # - "::1" # The certificate is at "./example.com+5.pem" and the key at "./example.com+5-key.pem" ✅
Bạn có thể bật SSL cho máy chủ HTTP hoặc máy chủ HTTP2, máy chủ WebSocket với các cài đặt sau:
<?php $server->set([ 'ssl_cert_file' => __DIR__ . '/config/example.com+5.pem', 'ssl_key_file' => __DIR__ . '/config/example.com+5-key.pem' ]);
Bạn có thể tìm thấy các cấu hình SSL khác tại Open Swoole Server Configuration.
Bạn phải vượt qua SWOOLE_SSL khi xác định máy chủ Open Swoole để bật SSL:
$server = new Swoole\Server("0.0.0.0", 9501, SWOOLE_PROCESS, SWOOLE_SOCK_TCP | SWOOLE_SSL);
# /etc/security/limits.conf * soft nofile 262140 * hard nofile 262140 root soft nofile 262140 root hard nofile 262140 * soft core unlimited * hard core unlimited root soft core unlimited root hard core unlimited
# /etc/sysctl.conf # socket buffer net.ipv4.tcp_mem = 379008 505344 758016 net.ipv4.tcp_wmem = 4096 16384 4194304 net.ipv4.tcp_rmem = 4096 87380 4194304 net.core.wmem_default = 8388608 net.core.rmem_default = 8388608 net.core.rmem_max = 16777216 net.core.wmem_max = 16777216 # ipv4 net.ipv4.tcp_syncookies=1 net.ipv4.tcp_max_syn_backlog=81920 net.ipv4.tcp_synack_retries=3 net.ipv4.tcp_syn_retries=3 net.ipv4.tcp_fin_timeout = 30 net.ipv4.tcp_keepalive_time = 300 net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_tw_recycle = 1 net.ipv4.ip_local_port_range = 20000 65000 net.ipv4.tcp_max_tw_buckets = 200000 net.ipv4.route.max_size = 5242880
Với OpenSwoole, bạn có thể thiết lập máy chủ TCP hoặc máy chủ HTTP và sử dụng các tùy chọn cấu hình sau để duy trì kết nối TCP đang hoạt động lâu dài:
Tất cả các quy trình trong OpenSwoole cần được bao bọc bên trong một ngữ cảnh chương trình đăng ký, ngữ cảnh này được tạo tự động cho bạn khi bạn sử dụng Máy chủ HTTP chẳng hạn.
Tuy nhiên, nếu bạn nhận được lỗi thông báo Lỗi chưa xác định: Uncaught Error: Call to undefined function Co\run()
or Uncaught Error: Call to undefined function go()
bạn phải đảm bảo rằng bạn đang sử dụng phiên bản v4.4.0 trở lên hoặc bạn đã include the namespace Swoole\Coroutine
.
Bạn cũng có thể sử dụng Swoole\Coroutine::create(callable $function, …$args): int|false là một thay thế cho go ().
Không, không thể chia sẻ một kết nối (Redis hoặc MySQL) giữa nhiều coroutines. Không thể đọc hoặc ghi cùng một lúc bằng một kết nối.
Bạn không thể chia sẻ kết nối nhưng bạn có thể giữ chúng mở hoặc chạy qua một nhóm kết nối. Một nhóm kết nối cho phép bạn lưu trữ nhiều kết nối có thể được sử dụng bởi nhiều coroutines và khôi phục lại khi chúng đã được sử dụng và không còn cần thiết nữa, bạn có thể đọc thêm về các nhóm kết nối tại đây.
Khi sử dụng OpenSwoole, đặc biệt là Máy chủ HTTP, bạn có thể gặp các thông báo sau trong bảng điều khiển:
NOTICE swFactoryProcess_finish (ERRNO 1004): send 165 byte failed, because connection[fd=123] is closed NOTICE swFactoryProcess_finish (ERROR 1005): connection[fd=123] does not exists
Khi nhìn thấy những thông báo này, chúng chỉ là thông báo và không có gì phải lo lắng. Những thông báo này được hiển thị do một trong những điều sau:
WARNING swWorker_discard_data (ERRNO 1007): [2] received the wrong data[21 bytes] from socket#75 WARNING Worker_discard_data (ERRNO 1007): [2] ignore data[5 bytes] received from session#2
Đây là điều bạn nên xem xét, các lỗi ở trên có nghĩa là bạn có một số lượng lớn kết nối bị ngắt kết nối và có thể cần phải kiểm tra cấu hình của mình với tùy chọn discard_timeout_request cho server.
Nếu bạn nhận được lỗi bị từ chối kết nối trên trình duyệt hoặc ứng dụng khách của mình, điều đó có thể có nghĩa là bạn đang không truy cập đúng địa chỉ IP hoặc cổng mà máy chủ OpenSwoole của bạn đang chạy.
Lỗi này thường đề cập đến mô-đun Swoole \ Client.
Khi gặp lỗi sau:
swoole_client::recv(): recv() failed. Error: Resource temporarily unavailable [11]
Nó chỉ ra rằng máy chủ không trả lại dữ liệu trong thời gian được chỉ định và kết nối đã hết thời gian chờ.
Nếu bạn gặp những điều sau:
WARNING swWorker_reactor_try_to_exit (ERRNO 9012): worker exit timeout, forced to terminate
Chỉ ra rằng quy trình công nhân đã không thoát trong thời gian đã thỏa thuận (max_wait_time
seconds) và OpenSwoole buộc phải chấm dứt quy trình làm việc.
Bạn nên tăng thời gian chờ hoặc đảm bảo khối lượng công việc của bạn có thể giữ trong khoảng thời gian cấu hình max_wait_time. Tuy nhiên, đây chỉ có thể là sự cố khi tắt hoặc khởi động lại máy chủ.
WARNING swSignalfd_onSignal (ERRNO 707): Unable to find callback function for signal Broken pipe: 13
Cho biết rằng dữ liệu được gửi đến một kết nối đã ngắt kết nối, thường là do giá trị trả về của lần gửi không được kiểm tra và việc trả lại không thành công và tiếp tục gửi.
Khi sử dụng SWOOLE_HOOK_CURL, bạn có thể gặp các lỗi sau:
PHP Notice: Object of class Swoole\Curl\Handler could not be converted to int PHP Warning: curl_multi_add_handle() expects parameter 2 to be resource, object given
Khi CURL được gọi, nó không còn là kiểu tài nguyên nữa mà là kiểu đối tượng nên việc chuyển đổi thành int (Số) sẽ không được hỗ trợ.
Giải pháp tốt nhất để giải quyết vấn đề này là sử dụng SWOOLE_HOOK_NATIVE_CURL thay vì sử dụng CURL.
Bạn cũng có thể sử dụng SDK của Guzzle để thay thế trình xử lý.
Khi sử dụng đồng thời kết nối coroutines và Guzzle 7.0 +, sau khi bắt đầu yêu cầu, kết quả sẽ được xuất trực tiếp đến thiết bị đầu cuối.
Vui lòng cập nhật lên ít nhất v4.5.8 vì điều này đã được khắc phục.
Lỗi này có thể được bỏ qua. Lỗi này là do tùy chọn socket_buffer_size quá lớn, không được các hệ thống chấp nhận và không ảnh hưởng đến hoạt động của chương trình.
Yêu cầu GET chỉ có một tiêu đề Http. OpenSwoole sử dụng bộ nhớ đệm kích thước cố định 8K và không thể sửa đổi. Nếu yêu cầu không phải là yêu cầu Http chính xác, sẽ xảy ra lỗi. Lỗi sau sẽ được đưa ra:
WARN swReactorThread_onReceive_http_request: http header is too long.
Kích thước tối đa bị giới hạn bởi package_max_length, mặc định là 2M, bạn có thể gọi Server-> set để chuyển vào một giá trị mới để sửa đổi kích thước. OpenSwoole chạy trong bộ nhớ, vì vậy nếu nó được đặt quá lớn, nó có thể gây ra một số lượng lớn các yêu cầu đồng thời làm cạn kiệt tài nguyên của máy chủ.
Có lẽ tốt nhất là bạn nên phân đoạn tải lên thay thế khi xử lý các tệp lớn đang được tải lên.
OpenSwoole được cài đặt thông qua một phần mở rộng PHP PECL và yêu cầu bạn định cấu hình và biên dịch trước khi sử dụng OpenSwoole trong ứng dụng của mình.
Do phương pháp cài đặt bất kỳ tiện ích mở rộng PHP nào, bạn có thể muốn kiểm tra cách bạn đã định cấu hình OpenSwoole vào một ngày sau đó, để thực hiện việc này, bạn có thể sử dụng php –ri openswoole sẽ hiển thị các thông tin tương tự như:
openswoole Open Swoole => enabled Author => Open Swoole Group & Contributors <[email protected]> Version => 4.7.3-dev Built => Nov 7 2021 14:44:34 coroutine => enabled with boost asm context kqueue => enabled rwlock => enabled sockets => enabled openssl => OpenSSL 3.0.0 7 sep 2021 dtls => enabled http2 => enabled json => enabled curl-native => enabled pcre => enabled c-ares => 1.17.2 zlib => 1.2.11 brotli => E16777225/D16777225 mysqlnd => enabled async_redis => enabled Directive => Local Value => Master Value swoole.enable_coroutine => On => On swoole.enable_library => On => On swoole.enable_preemptive_scheduler => Off => Off swoole.display_errors => On => On swoole.use_shortname => On => On swoole.unixsock_buffer_size => 262144 => 262144
Sau đó, nếu cần cấu hình lại OpenSwoole với các cài đặt khác, bạn có thể sử dụng ví dụ:
pecl install --configureoptions 'enable-sockets="no" enable-openssl="yes" enable-http2="yes" enable-mysqlnd="yes" enable-swoole-json="no" enable-swoole-curl="yes"' openswoole
Xem thêm về cách cài đặt tại đây.
Bạn có thể bật bí danh tên tắt OpenSwoole bằng cách sửa đổi php.ini hoặc openswoole.ini và thêm dòng sau:
swoole.use_shortname=On
Bạn có thể tắt bí danh tên viết tắt của OpenSwoole bằng cách sửa đổi php.ini hoặc openswoole.ini và thêm dòng sau:
swoole.use_shortname=Off
Bài viết liên quan:
Giới thiệu về php swoole.
Cài đặt và cấu hình php swoole.
Hi vọng với bài viết này, bạn có thể giải quyết cá vấn lỗi cơ bản cho dự án của mình . Nếu bạn thấy bài viết hay và có ý nghĩa hãy like và chia sẻ bài viết này để mọi người cùng nhau học tập nhé. Cảm ơn các bạn đã ghé thăm codetutam.com
Bình luận: