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協(xié)議后面"\n"換行符是必須的
$mail_buffer = json_encode($mail_data)."\n";
// 發(fā)送給Taskworker
fwrite($socket, $mail_buffer);
}
循環(huán)給Taskworker發(fā)任務(wù)來請(qǐng)求手機(jī)歸屬地接口 但是發(fā)現(xiàn)Taskworker接到的數(shù)據(jù)不是完整的 user_id 也不是連續(xù) 并且少了好多個(gè) 大概循環(huán)發(fā)200個(gè)只接受到70個(gè)左右 請(qǐng)問大佬這是為什么啊
打印下$mail_buffer的長(zhǎng)度和fwrite的返回值是否相等,如果不相等說明fwrite沒有發(fā)送完整的數(shù)據(jù)。
客戶端fwrite后最好要fread下,相應(yīng)的Taskworker收到請(qǐng)求后立刻給客戶端send一個(gè)響應(yīng)數(shù)據(jù),證明服務(wù)端應(yīng)收到。
fwrite成功僅僅代表數(shù)據(jù)放入了操作系統(tǒng)發(fā)送緩沖區(qū),并不代表真的已經(jīng)發(fā)送給Taskworker,也不代表Taskworker已經(jīng)收到,所以要收到Taskworker的響應(yīng)才算收到。
最后循環(huán)stream_socket_client創(chuàng)建連接,如果循環(huán)量很大會(huì)創(chuàng)建大量的短連接,有些操作系統(tǒng)內(nèi)核配置如果沒有經(jīng)過優(yōu)化,是無法創(chuàng)建大量短連接的,如果是linux系統(tǒng),請(qǐng)參考workerman手冊(cè)附錄優(yōu)化linux內(nèi)核。