是阻塞引起的吗?

hoasem

请教个问题
fwrite($client, $data_string."\n");
// 读取推送结果
$resp = fread($client, 8192);
fwrite 在服务端没接收到内容, fread也没接收到回应,这种情况会不会是阻塞造成的?

2571 5 0
5个回答

hoasem

补充:
用的单进程,并且客户端设备大约在700左右

  • 暂无评论
walkor

只有这两行客户端代码看不出什么问题的

  • 暂无评论
hoasem
// 建立socket连接到内部推送端口
$client = stream_socket_client($this->config, $errno, $errmsg,  5, STREAM_CLIENT_ASYNC_CONNECT|STREAM_CLIENT_CONNECT);
if(!$client)
{
    Helper::logger('Jpush_error.log', 'WMERR-->'."erreur : $errno - $errstr<br />n");
    return false;
} else {
    // 推送的数据,包含uid字段,表示是给这个uid推送
    $data = 'push';
    $data =  $alias;
    $data_string = json_encode($data);
    // 发送数据,注意3212端口是Text协议的端口,Text协议需要在数据末尾加上换行符
    //var_dump($data_string);exit;
    fwrite($client, $data_string."\n");
    // 读取推送结果
    $resp = fread($client, 8192);
    return self::handleResult(str_replace("\n", "", $resp),$data_string,"WM");
}

基本是取的demo里面的,稍微调整了一点点

  • 暂无评论
hoasem

另外,这里是不是设置成 socket_set_nonblock 会好些,不过想问下非阻塞情况下,fread也能获取到返回值吧?

  • 暂无评论
walkor

上面的意思是说信息量太少了,只贴客户端代码无法定位是什么问题。

请描述下要做什么?期待结果以及实际结果(详细的说明)?客户端连接的端口是?以及服务端是否是workerman?如果是workerman的话对应的启动脚本代码是什么?以及业务处理逻辑是什么都要贴出来

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