2016-06-20 20 views
0

私はRedisで動作するPHP上でバックエンドを持っています。PhpとRedisの間のトラフィックが多い接続

しかしときの要求が増加し、彼らは毎秒2000以上の要求、私はエラーが表示されます。

99 - Cannot assign requested address 

TIME_WAITのすべてのソケット。 http://redis4you.com/articles.php?id=012&name=redis

しかし、私は1 ドンに設定することはできませんは、/ proc/sys/net/IPv4の/ tcp_tw_recycle:私は解決策を見つける

$this->_socket = @stream_socket_client(
    'tcp://' . $this->hostname . ':' . $this->port, 
    $errorNumber, 
    $errorDescription, 
    ini_get('default_socket_timeout'), 
    STREAM_CLIENT_CONNECT | STREAM_CLIENT_PERSISTENT 
); 

:例の接続


アプリケーションとredisの間のネットワーク上のパケットを失いたくない。

APIからの新規リクエスト時にPHPが新しいソケットを作成します。

アイデア?私はあなたの全体のデザインを知っているが、ここにあなたができるものではないん

+0

同じソケットを使用して複数のリクエストを送信できますか? –

+0

同じソケットを使用して複数のリクエストを送信するにはどうすればよいですか? –

+0

http://redis.io/topics/pipelining –

答えて

0

修正済みの問題。 ソケットセットのtcp reuceとtime waiteを10秒で使用します。通常モードのソケットでPHPを動作

STREAM_CLIENT_CONNECT | STREAM_CLIENT_PERSISTENT 

そうでも毎秒2 000の要求にそれが61個のソケット、より多くのではないを使用します。

0

:常に(しばらく(真)ループで)実行するPHPページを作成します

  • このページは待つだろう最初のページの内容(ソケットコードが以前のもの)
  • パイプライニング手法を使用すると、すべての要求が同じソケットを使用して送信されます。
  • 最初のページからこの新しいページにデータを渡す方法のみが欠落しています。

    • 初期ページからのデータを格納し、まだ新しいものからそれを得るためにそれを使用するAPCを使用した:私は、複数のソリューションを参照してくださいその最後の部分(わからないが、彼らの場合、すべての作業)については

  • 新しいページにSESSIONを作成します。これには、処理、サブミットの2つのモードがあります。最初のページのローカルサーバーを使用してこのページを呼び出す必要があります。

この両方のソリューションでは、この新しいページの1つのインスタンスがローカルで実行され、「処理中/待機中」がアクティブになります。

関連する問題