【发布时间】:2015-07-22 10:28:42
【问题描述】:
我正在测试一个依赖于另一个基于流的库的 PHP 库。我的经验是与流相比级别较低的套接字,所以我有点不确定流是否足够灵活。
基本上,使用套接字,我会编写一个缓冲区循环来检查每个数据块中是否存在 EOL 字符,例如 \n,就像这样......
PHP
$data = NULL;
while ($buffer = socket_read($connection,1024)) {
$data .= $buffer;
if (strpos($buffer, "\n") !== FALSE) {
$data = substr($data,0,-1);
break;
}
}
我希望做类似的事情,而不必重写他们的整个库。问题来了……
stream_get_line($handle,$length,$EOL) 接受一个长度值,但会截断比这更长的所有内容。 PHP 文档状态...
当读取到 length 个字节、找到由 ending 指定的字符串(不包含在返回值中)或 EOF 时(以先到者为准),读取结束。
...并且没有偏移参数,所以我不能以相同的方式使用它来获取余数。这意味着如果我不知道数据的长度,或者如果它不一致,我需要将length 设置得足够高以处理任何可能的数据长度。
这不是大问题,这似乎有效。问题是将$length 值设置为512000 (500Kb) 之类的值是否会对较短的响应造成大量不必要的开销?
【问题讨论】:
标签: php performance sockets stream