Php 和 Redis 之间的高流量连接
High traffic connection between Php and Redis
我在 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 的新请求创建一个新套接字。
有什么想法吗?
我不知道你的整个设计,但这里有一些你可以做的事情:
- 创建一个 PHP 页面,该页面总是 运行(带有 while(true) 循环)
- 此页面将等待您的初始页面(套接字代码之前所在的页面)的内容
- 使用流水线技术,您将使用同一个套接字发送所有请求。
- 唯一缺少的是如何将数据从初始页面传递到这个新页面。
对于最后一部分,我看到了多个解决方案(但不确定它们是否都有效):
- 使用 APC 从初始页面存储数据并仍然使用它从新页面获取数据。
- 在新页面中创建一个 SESSION,它将有两种模式:处理中、提交中。然后,您应该在初始页面内使用本地服务器调用此页面。
在这两种解决方案中,这个新页面的一个实例应在本地执行,因此 'Processing/Waiting' 被激活。
已解决问题。
在 10 秒内对套接字集使用 tcp reuce 和 time waite。 Php 在持久模式下使用套接字
STREAM_CLIENT_CONNECT | STREAM_CLIENT_PERSISTENT
所以即使在每秒 2000 个请求中它也使用不超过 61 个套接字。
我在 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 的新请求创建一个新套接字。
有什么想法吗?
我不知道你的整个设计,但这里有一些你可以做的事情:
- 创建一个 PHP 页面,该页面总是 运行(带有 while(true) 循环)
- 此页面将等待您的初始页面(套接字代码之前所在的页面)的内容
- 使用流水线技术,您将使用同一个套接字发送所有请求。
- 唯一缺少的是如何将数据从初始页面传递到这个新页面。
对于最后一部分,我看到了多个解决方案(但不确定它们是否都有效):
- 使用 APC 从初始页面存储数据并仍然使用它从新页面获取数据。
- 在新页面中创建一个 SESSION,它将有两种模式:处理中、提交中。然后,您应该在初始页面内使用本地服务器调用此页面。
在这两种解决方案中,这个新页面的一个实例应在本地执行,因此 'Processing/Waiting' 被激活。
已解决问题。 在 10 秒内对套接字集使用 tcp reuce 和 time waite。 Php 在持久模式下使用套接字
STREAM_CLIENT_CONNECT | STREAM_CLIENT_PERSISTENT
所以即使在每秒 2000 个请求中它也使用不超过 61 个套接字。