我正面临ZMQ的一个奇怪问题,我只是无法调试。这些是组件:
PHP客户端 - 使用REQ套接字进行简单请求回复。这是请求流程:
$zcontext = new ZMQContext();
$socket = new ZMQSocket($zcontext, ZMQ::SOCKET_REQ);
$socket->connect(<address>);
$startTime = microtime(true);
$socket->send(<request>);
$result = $socket->recv();
$totalTime = microtime(true) - $startTime;
ZMQ套接字使用TCP,服务器和客户端都在同一台机器上。
PHP脚本由apache提供,我使用apache基准测试加载测试。我使用并发200来发出5000个请求。在PHP客户端,我记录请求回复所需的时间($totalTime
)。在大多数情况下,这个时间非常短(低于500毫秒),但有时需要很长时间 - 有时甚至是60秒(发送+接收)。
我添加了一些额外的日志记录来找出问题发生的位置,事实证明,无论何时需要很长时间,几乎所有的时间都在PHP的发送和Java的接收之间 - 所以数据包需要很长时间才能到达服务器。
我没有设置任何特殊的ZMQ设置,或者做任何不寻常的事情,所以我不知道导致问题的原因。还应该注意的是,即使在较低的并发率(我也在100和150处测试)时问题仍然存在,但最大请求时间较短。
对不起,如果问题看起来模糊不清 - 我会提供可能需要的任何其他详细信息。