用fwrite函数自动写入数据

时间:2019-05-23 13:00:30

标签: php fwrite

我使用库WorkerMan通过WebSocket向客户端发送数据。 我有一个代码,可通过tcp协议将数据发送到Worker:

$instance = stream_socket_client('tcp://mysitedomain.com:5000');
$message_text = json_encode($message);
fwrite($instance,  $message_text. "\n");

我的接收方代码是:

$receiver_worker= new \Workerman\Worker('tcp://mysitedomain.com:5000');
$receiver_worker->transport = 'ssl';
$receiver_worker->onMessage = function($connection, $data) {

Worker::log($data);
$data_json = json_decode($data, TRUE);

//here I process the $data

}

我的问题是,当$ message_text太大时,我收到的不是一条消息,而是两条或更多。原因在fwrite函数文档中进行了描述:

  

在写入整个字符串之前,写入网络流的操作可能会结束。可以检查fwrite()的返回值:

建议是:

function fwrite_stream($fp, $string) {
    for ($written = 0; $written < strlen($string); $written += $fwrite) {
        $fwrite = fwrite($fp, substr($string, $written));
        if ($fwrite === false) {
            return $written;
        }
    }
    return $written;
}

但是我不知道,它如何能帮助我。我只能原子地处理接收到的json,并应确保接收到整个json,但不能接收到某些部分。

0 个答案:

没有答案