PHPサーバーをより効率的にしようとしています。 私はソケット接続の1つのアレイ、および1つのアレイを持っている今のところなどid
、2次元配列のsocket_select()
を、このようなname
として接続されたクライアントが含まれていClient
指定されたオブジェクト(サーバとのオープンソケット接続を持っている)情報を構築しましたクライアントオブジェクトの 私は接続を参照しているとき、私はこの接続に一致するクライアントを見つけるためにクライアント配列内を検索しています。 それは素晴らしいですが、それは少し非効率です。サーバのクライアントの少量のためにそれを感じることはありませんが、私は何千もの接続を持っているならそれはサーバーを減速させることを恐れています。
解決策として、私は約2次元配列を考えましたが、私はそれを設計するロジックの問題があります。
私はこのような何かを行うことができます。
$clients = array();
$temp = array($newsock, new Client());
$clients[] = $temp;
私は私の$clients[]
がクライアント対象となるソケットと$clients[][]
になりたいです。 $client
の各行には、その接続のクライアントオブジェクトとなる$client[$index][0]
しかありません。 これをsocket_select()
関数に送信できますか?
一般に、インデックスとしてidを使用すると、ソケット接続後にClientオブジェクトのidプロパティがクライアントによって送信される唯一の問題であり、サーバ。 pcntl_fork()関数についてもう少し説明できますか?私はUNIXに精通していないので、私はphp.netで読んだ説明を理解していませんでした。 –
'pcntl_fork()'は** unixのようなシステム**でのみ動作します。パフォーマンスを向上させるために親プロセスとは別の子プロセスを作成するプロセスです。子プロセスは特定の要求を処理して、親サーバーが受信データの処理を続けることができます。 – Lix
それは試してみると良いアイデアです...私の質問に戻って、あなたは何を提案していますか?配列(socket、new Client())をsocket_select()関数に送り返すことができますか?または多分私は(接続が行われた後にクライアントから受信される)一意のIDを待つ必要がありますし、ソケットにオブジェクトを接続するだけですか? –