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个左右 请问大佬这是为什么啊
打印下$mail_buffer的长度和fwrite的返回值是否相等,如果不相等说明fwrite没有发送完整的数据。
客户端fwrite后最好要fread下,相应的Taskworker收到请求后立刻给客户端send一个响应数据,证明服务端应收到。
fwrite成功仅仅代表数据放入了操作系统发送缓冲区,并不代表真的已经发送给Taskworker,也不代表Taskworker已经收到,所以要收到Taskworker的响应才算收到。
最后循环stream_socket_client创建连接,如果循环量很大会创建大量的短连接,有些操作系统内核配置如果没有经过优化,是无法创建大量短连接的,如果是linux系统,请参考workerman手册附录优化linux内核。