我在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&name=redis
但/ proc / sys / net / ipv4 / tcp_tw_recycle我不能设置为1。 不要在应用程序和redis之间丢失网络上的数据包。
Php对来自API的新请求创建一个新套接字。
有什么想法吗?
答案 0 :(得分:0)
我不知道你的整个设计,但在这里你可以做的事情:
对于最后一部分,我看到了多个解决方案(不确定它们是否都有效):
在这两个解决方案中,此新页面的一个实例应在本地执行,以便激活“处理/等待”。
答案 1 :(得分:0)
修复了问题。 在10秒内使用tcp reuce和time waitite来设置套接字。 Php在持久模式下使用套接字
STREAM_CLIENT_CONNECT | STREAM_CLIENT_PERSISTENT
因此,即使在每秒2 000个请求中,它也使用不超过61个套接字。