1

php-amqp を使用して、ローカルの rabbitmq サーバーから読み書きしています。これは、トラフィックの多い Web サイト用です。http://code.google.com/p/php-amqp/の例に従って、すべての Web リクエストで amqp_login の呼び出しを回避する方法を見つけられませんでした。amqp_login への呼び出しは、シーケンスの中で最も低速です。すべての Web リクエストでこれを呼び出す必要を回避する簡単な方法はありますか? SuSE Linux で Apache を使用しています。

$time = microtime(true);
$connection = amqp_connection_popen('localhost', 5672);
print "connect: ".(microtime(true) - $time) . "\n"; 

$time = microtime(true);
amqp_login($connection, 'guest', 'guest', '/');
print "login: ".(microtime(true) - $time) . "\n"; 

$time = microtime(true);
$channel = 1;
amqp_channel_open($connection, $channel);
print "channel open: ".(microtime(true) - $time) . "\n"; 

$time = microtime(true);
$exchange = 'amq.fanout';
amqp_basic_publish($connection, $channel, $exchange, $routing_key, 'junk', $mandatory = false, $immediate = false, array());
print "publish: ".(microtime(true) - $time) . "\n";

結果の例:

connect: 0.00019311904907227
login: 0.041217088699341
channel open: 0.00034213066101074
publish: 5.6028366088867E-5
4

1 に答える 1

0

すべての Web リクエストでこれを呼び出す必要を回避する簡単な方法はありますか?

ただし、このパッケージに特に精通していません....

永続的な接続を許可するが、永続的な認証を許可しないことは驚くべきことです。これを修正する 1 つの方法は、サーバー + ポートだけでなく、サーバー + ポート + ユーザー名 + パスワードに基づいて接続プールのキーを設定することです。コードに。

C コードを変更したりメンテナーと議論したくない場合は、認証された接続を維持するプロキシ デーモンを実行できます。

于 2012-10-11T15:51:21.200 に答える