workerman開発者が知っておくべきいくつかの問題

1、Windows環境の制限

WindowsシステムではWorkermanの単一プロセスが200以上の接続をサポートしています。
Windowsシステムではcountパラメータを使って多プロセスを設定することができません。
Windowsシステムではstatus、stop、reload、restartなどのコマンドを使用できません。
Windowsシステムではデーモンプロセスを実行できず、cmdウィンドウを閉じるとサービスが停止します。
Windowsシステムでは1つのファイル内で複数のリスニングを初期化できません。
Linuxシステムには上記の制限がなく、正式な環境にはLinuxシステムを使用することを推奨します。開発環境にはWindowsシステムを選択することができます。

2、WorkermanはApacheやNginxに依存しない

Workerman自体はApacheやNginxに類似したコンテナです。 PHP環境が整っていれば、Workermanは実行可能です。

3、Workermanはコマンドラインから起動する

起動方法はApacheと同様にコマンドを使って起動します(一般的なウェブスペースではWorkermanを使用できません)。起動画面は以下のようになります。

4、長接続には必ずハートビートを加える必要がある

長接続には必ずハートビートを加える必要があります。長接続には必ずハートビートを加える必要があります。長接続には必ずハートビートを加える必要があります。重要なことなので三回言います。
長接続が長時間通信を行わないと、ルーティングノードによってクリーンアップされて接続が閉じられる可能性があります。
Workermanハートビートの説明gatewayWorkerハートビートの説明

5、クライアントとサーバーのプロトコルは必ず対応していなければ通信できない

これは開発者にとって非常に一般的な問題です。例えば、クライアントがwebsocketプロトコルを使用している場合、サーバーもwebsocketプロトコルでなければ(サーバーnew Worker('websocket://0.0.0.0...'))、接続ができず通信できません。
ブラウザのアドレスバーでwebsocketプロトコルのポートにアクセスすることや、websocketプロトコルを使用して生のtcpプロトコルのポートにアクセスすることは避けてください。プロトコルは必ず対応している必要があります。

ここでの原理は、もしあなたがイギリス人と交流したい場合、英語を使わなければならないのと似ています。もし日本人と交流したいなら、日本語を使わなければなりません。ここでの言語は通信プロトコルに似ており、両者(クライアントとサーバー)は同じ言語を使用しなければ通信ができません。さもなければ通信は不可能です。

6、接続失敗の可能性のある原因

Workermanの使用を開始したばかりの頃に多く見られる問題は、クライアントがサーバーに接続できないことです。一般的な原因は以下の通りです:
1、サーバーのファイアウォール(クラウドサーバーのセキュリティグループを含む)が接続をブロックしている(50%の確率でこれです)
2、クライアントとサーバーで使用しているプロトコルが一致していない(30%の確率)
3、IPまたはポートを間違えた(15%の確率)
4、サーバーが起動していない

7、exit die sleep文を使用しないこと

業務の実行中にexitやdie文を使うとプロセスが終了し、WORKER EXIT UNEXPECTEDエラーが表示されます。当然ながら、プロセスが終了すると、すぐに新しいプロセスが再起動してサービスを継続します。戻り値が必要な場合は、returnを呼び出すことができます。sleep文はプロセスをスリープさせ、その間は一切の業務が実行されず、フレームワークも停止し、そのプロセスのすべてのクライアントリクエストを処理できなくなります。

8、pcntl_fork関数を使用しないこと

pcntl_forkは新しいプロセスを動的に作成するために使用されますが、業務コードの中でpcntl_forkを使用すると、回収不能な孤児プロセスが生成され、ビジネスに異常を引き起こす可能性があります。ビジネス内でpcntl_forkを使用すると、接続、メッセージ、接続のクローズ、タイマーなどのイベントの処理にも影響を与え、予測不可能な異常を引き起こします。

9、業務コード内に無限ループを持たないこと

業務コード内に無限ループを持つと、制御をWorkermanフレームワークに戻すことができなくなり、他のクライアントメッセージの受信や処理が不可能になります。

10、コードを変更したら再起動が必要

Workermanは常駐メモリのフレームワークであり、コードを変更したらWorkermanを再起動することで新しいコードの効果を見ることができます。

11、長接続アプリケーションにはGatewayWorkerフレームワークをお勧めします

多くの開発者がWorkermanを使用して長接続アプリケーション(例えば、即時通信やIoTなど)を開発するために使用しています。長接続アプリケーションには直接GatewayWorkerフレームワークを使用することをお勧めします。これはWorkermanに基づいて再度ラッピングされており、長接続アプリケーションのバックエンドをより簡単で使いやすくします。

12、さらなる高い同時接続をサポートする
ビジネスの同時接続数が1000を超える場合は、必ずLinuxカーネルを最適化し、event拡張をインストールしてください。