相关疑难解决方法(0)

1126
推荐指数
17
解决办法
84万
查看次数

非阻塞套接字:消息是否排队?

据我了解,可以在PHP 5.x中创建一个非阻塞网络套接字.

但是如果脚本使用相同的非阻塞套接字发送几条长消息,会发生什么?

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 ......依此类推......

php sockets asyncsocket php-5.3

8
推荐指数
1
解决办法
943
查看次数

如何通过stream_get_contents()连续监听多个TCP流?

默认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 sockets streaming network-programming stream

2
推荐指数
1
解决办法
1465
查看次数