php pthreads主线程如何获取到子线程的scoket资源?

发布于 2022-08-28 00:49:29 字数 1855 浏览 5 评论 0

php pthreads主线程如何获取到子线程的scoket资源?
最近公司要做的一个业务是,要用amqp的consume方法监听队列,同时与多个终端保持连接,一旦队列里有消息就马上下发给终端,不能有延迟,
我想到的是只能用线程来做,如果用多进程来实现,socket资源是不能共享的,但是现在用了pthreads 扩展也不行,从主线程中无法获取到子线程中的连接,大侠们请教下怎么弄

  <?php
class PrintServer extends Thread{
    public  $connections = array();
    public function __construct() {
        $this->connections = array();
    }
    public function run(){
        $connections = array();
        //监听端口
        $PORT = 8888;
        $sock = socket_create_listen($PORT);
        if (!$sock) {
            exit(1);
        }
//不阻塞
        socket_set_nonblock($sock);
        while (true) {
        //    $readfds = array_merge($this->connections, array($sock));
            $readfds = array_merge($connections, array($sock));
            $writefds = array();
            //选择一个连接,获取读、写连接通道
            $e= null;
            $flag = socket_select($readfds, $writefds, $e, $t = 5);
            if ($flag) {
                foreach ($readfds as $rfd) {
                    if ($rfd == $sock) {
                        //接受客户端连接
                        $newconn = socket_accept($sock);
                        $i = (int)$newconn;
                        //将当前客户端连接放如socket_select选择
                        $connections[$i] = $newconn;
                        //输入的连接资源缓存容器
                        $writefds[$i] = $newconn;
                        var_dump($connections);
                        $this->connections = $connections;
                        var_dump($this->connections);
                        echo "Welcome to the PHP Chat Server!\n";
                        continue;
                    }
                }
            }
            echo "a\n";
        }
    }
}
$my = new PrintServer();
$my->start();
while(true){
   var_dump($my->connections);
   sleep(3);
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文