У меня есть бэкэнд на php, который работает с Redis.
Но когда запросы увеличились и они превысили 2000 запросов в секунду, я получаю сообщение об ошибке:
99 - Cannot assign requested address
Все сокеты в TIME_WAIT.
Пример подключения:
$this->_socket = @stream_socket_client(
'tcp://' . $this->hostname . ':' . $this->port,
$errorNumber,
$errorDescription,
ini_get('default_socket_timeout'),
STREAM_CLIENT_CONNECT | STREAM_CLIENT_PERSISTENT
);
Я нахожу решение: http://redis4you.com/articles.php?id=012&имя = Redis
Но / proc / sys / net / ipv4 / tcp_tw_recycle я не могу установить в 1.
Не хочу терять пакеты в сети между приложением и redis.
Php на новый запрос от API создать новый сокет.
Есть идеи?
Я не знаю весь ваш дизайн, но вот что вы могли бы сделать:
В этой последней части я вижу несколько решений (не уверен, что они все работают):
В обоих решениях один экземпляр этой новой страницы должен выполняться локально, поэтому активируется «Обработка / Ожидание».
Исправлена проблема.
Используйте tcp reuce и время ожидания для наборов сокетов за 10 секунд. PHP работает с сокетом в постоянном режиме
STREAM_CLIENT_CONNECT | STREAM_CLIENT_PERSISTENT
Таким образом, даже при 2000 запросах в секунду он использует не более 61 сокета.