关于AsyncTcpConnection,异步阻塞问题
$socket = new AsyncTcpConnection($tcp);
$socket->onConnect = function($socket) use($db)
{
//在这里循环发送消息,发现全部循环完毕后,才接收到返回结果,在循环过程中,全部是阻塞的吗?
for($i = 0; $i < 1000; $i++)
{
$request = send_datas1($db);
//print_r($request);
$socket->send($request);
}
};
//服务器响应,接收返回结果
$socket->onMessage = function($socket, $result) use($db)
{
try
{
print_r($result);
$db->update($table)->cols($result)->where()->query();
}
catch(\Exception $e)
{
print_r($e->getMessage());
}
};
$socket->onClose = function($socket) {
// 如果连接断开,则在1秒后重连
$socket->reConnect(1);
};
$socket->onError = function($socket, $err_code, $err_msg)
{
};
// 执行异步链接
$socket->connect();
5个回答
年代过于久远,无法发表回答
循环过程中,代码执行环境一直在这个循环里,workerman一直没有得到运行控制权,workerman就不会接收到数据,不会触发onmessage。你这里只有当onConnect里所有代码执行完毕,workerman才会获得控制权,才会接收数据。
如果做到实时接时,改成这样吗?
这样会不会建立1000个链接,导致性能下降?
效果一样,for循环里执行完毕才能有机会触发onmessage。
上面两个for循环执行很快的,可能就0.001秒的时间,我觉得你没必要纠结这点时间。
谢谢!!!!