循环给Taskworker发任务Taskworker接到的数据不完整

JJCHAN
foreach ($data as $key => $value) {
    $socket = stream_socket_client("tcp://127.0.0.1:7272", $errno, $errmsg, 5);
    if(!$socket) echo $errmsg;
    $mail_data = array("phone"=>$value,"user_id"=>$value,);
    // 注意,Text协议后面"\n"换行符是必须的
    $mail_buffer = json_encode($mail_data)."\n";
    // 发送给Taskworker
    fwrite($socket, $mail_buffer);
}

循环给Taskworker发任务来请求手机归属地接口 但是发现Taskworker接到的数据不是完整的 user_id 也不是连续 并且少了好多个 大概循环发200个只接受到70个左右 请问大佬这是为什么啊

2043 1 0
1个回答

walkor

打印下$mail_buffer的长度和fwrite的返回值是否相等,如果不相等说明fwrite没有发送完整的数据。

客户端fwrite后最好要fread下,相应的Taskworker收到请求后立刻给客户端send一个响应数据,证明服务端应收到。

fwrite成功仅仅代表数据放入了操作系统发送缓冲区,并不代表真的已经发送给Taskworker,也不代表Taskworker已经收到,所以要收到Taskworker的响应才算收到。

最后循环stream_socket_client创建连接,如果循环量很大会创建大量的短连接,有些操作系统内核配置如果没有经过优化,是无法创建大量短连接的,如果是linux系统,请参考workerman手册附录优化linux内核。

  • 暂无评论
年代过于久远,无法发表回答
🔝