但是如果脚本使用相同的非阻塞套接字发送几条长消息,会发生什么?
socket_write($socket, $string1, $length);
socket_write($socket, $string2, $length);
socket_write($socket, $string3, $length);
socket_write($socket, $string4, $length);
Run Code Online (Sandbox Code Playgroud)
这些消息是否排队(在发送方/接收方?)或接收方是否可能因为发送"并行"而获取不同消息的一部分?
例如:接收器是否有可能获得10个字节的$ string1,然后30个字节的$ string2,然后是另外25个字节的$ string1 ......依此类推......
默认stream_get_contents等待并听60秒.如果我有多个流,并希望不断听取所有流.
在foreach里面,如果我正在听一个流,我不能听其他人.
什么是连续监听和捕获所有流的流输出的解决方案?
while(true){
//$streamArray is an array of streams obtained by stream_socket_client("tcp://..);
foreach($streamArray as $stream){
fputs($stream,$command);
stream_get_contents($stream); // and update file/DB (Blocking call)
}
}
Run Code Online (Sandbox Code Playgroud)
注意:对于我已经完成的每一个流 stream_set_blocking( $stream , true );
更新:
我的要求是在30分钟内听一下所有的流.同时我不能听2流.如果我有5个流,我的代码只是time division multiplexing,在30 分钟内,每个单独的流将仅记录6分钟
我有一个解决方案,可以为各个流提供AJAX请求并独立记录.当然我不想做这个多AJAX调用方法,因为它会导致更多的代码以及更多的CPU.
php ×2
sockets ×2
asynchronous ×1
asyncsocket ×1
execution ×1
php-5.3 ×1
stream ×1
streaming ×1
synchronous ×1