国产+高潮+在线,国产 av 仑乱内谢,www国产亚洲精品久久,51国产偷自视频区视频,成人午夜精品网站在线观看

php stream_socket_pair 亂入如何解決??

灰色v碰觸

本來使用 stream_socket_pair 是用來父子進程間通信的,實現(xiàn)多進程下,某個子進程消息通過父進程轉發(fā)給其他子進程(類似于 qq),但是這碰到了一個問題:

$count     = 4;
$childConn = [];
$parent    = null;

for ($i = 0; $i < $count; ++$i)
{
    $pair = stream_socket_pair(STREAM_PF_UNIX , STREAM_SOCK_STREAM , STREAM_IPRROTO_IP);
    $pid = pcntl_fork();

    if ($pid < 0) {
        throw new Exception("創(chuàng)建子進程失敗");
    } else if ($pid > 0) {
        fclose($pair);
        $child = $pair;
        $childConn = $child;
        // 監(jiān)聽子進程消息
        listenChild($child); 
    } else {
        fclose($pair);
        $parent = $pair;
        // 監(jiān)聽父進程消息
        listenParent($parent);
    }
}

以上目的就是為每個子進程創(chuàng)建與父進程的通信通道,然結果卻發(fā)生了令人意外的效果!

比如下面一個通信過程:

父進程pid: 30246
子進程pid: 30247 30248 30249 30250,每個子進程中都監(jiān)聽客戶端連接。

客戶端A 進入子進程 30247
客戶端B 進入子進程 30248
A 客戶端發(fā)送消息,子進程 30247 接受到消息,要求轉發(fā)給 30248 中的客戶端 B
子進程 30247 調用事先保存的 $parent(與父進程的通信連接),發(fā)送消息
... 意外產(chǎn)生了??!
你可能想當然的以為,他絕對是發(fā)送給父進程(30246)!
而實際上不是!結果可能是其他子進程!
到這兒,我就很郁悶了,stream_socket_pair 創(chuàng)建的成對套接字,怎么會發(fā)生這種現(xiàn)象??

我表示特別無語了 ....跪求大神解救

2984 1 0
1個回答

maq

貌似你的兩個連接用反了……

  • 暫無評論
年代過于久遠,無法發(fā)表回答
??