ホームページ > バックエンド開発 > PHPチュートリアル > PHP Websocket エラーについて: 「stream_select(): You MUST reco_PHP チュートリアル」

PHP Websocket エラーについて: 「stream_select(): You MUST reco_PHP チュートリアル」

WBOY
リリース: 2016-07-13 10:39:39
オリジナル
1432 人が閲覧しました

最近、Ratchet (PHP WebSocket フレームワーク) を使用して PHP Web サイトを変換すると、エラーが発生しました:

「1024 に設定されていますが、少なくとも 1266 までの番号が付けられた記述子があります。

--enable-fd-setsize=2048 が推奨されますが、システムでサポートされているオープン ファイルの最大数と等しくなるように設定することもできます

何度かの紆余曲折の後、その理由は、PHP ソース コードが FD_SIZE を 1024 に設定しているためであることがわかりました。WebSocket 接続が 1024 を超えると、このエラーが報告されます。インターネット上の解決策は、基本的には PHP のソースコードを変更して PHP を再コンパイルすることですが、個人的には PHP のソースコードを変更するのは危険であると考えているため、新しいアイデアを思いつき、プロジェクトで使用することに成功しました。コピーを提出してください)。

基本原則は、バックグラウンドでさらにいくつかの WebSocket サービス プロセスを開き、各プロセスが異なるポート番号を使用することです。フロントエンド js は、バックグラウンドで開いている WebSocket サービス プロセスのポート番号にランダムに接続します。このように、各 WebSocket サービス プロセスには 1024 の利用可能な接続があります。必要な WebSocket サービス プロセスの数は、Web サイトの接続のピーク数に基づいて計算できます。もちろん、ある程度のマージンを残しておく必要があります。この方法では、PHP ソース コードを再コンパイルする必要がなく、PHP WebSocket の 1024 接続制限を簡単に突破できます。

バックエンドの実装


Push-server.php を WebSocket サービスとして作成します。push-server の実装は Ratchet の例を参照できますが、少し変更する必要があります。つまり、コマンド ライン パラメーターとして port を入力できます。
リーリー

必要に応じて、次のような複数の WebSocket プロセスを開始できます。

phpプッシュサーバー40003

phpプッシュサーバー40004

phpプッシュサーバー40005

このようにして、バックグラウンドは 1024 * 3 = 3072 の WebSocket 接続を許容できます。

フロントデスクの実施 接続サービスをランダムに取得するコードは次のとおりです:

リーリー

もちろん、自分のニーズに応じて特定の WebSocket サービスに接続するタイミングを指定することもできるので、詳細は説明しません。

http://www.bkjia.com/PHPjc/729840.html

tru​​ehttp://www.bkjia.com/PHPjc/729840.html技術記事最近、Ratchet (PHP Web ソケット フレームワーク) を使用して PHP Web サイトを変換していたときに、次のエラーが発生しました。「1024 に設定されていますが、記述子には少なくとも 1266 の番号が付いています....
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート