PHP线程TCP套接字服务器

PHP线程TCP套接字服务器,php,multithreading,sockets,tcp,client,Php,Multithreading,Sockets,Tcp,Client,我正在尝试使用PHP的pthread扩展来设置线程化TCP服务器。我知道,它没有得到官方的支持,但我尝试过这样做: class luokka extends Thread { private $client; public function __construct($socket) { $this->client = $socket; $this->start(); // Starts the threading } p

我正在尝试使用PHP的
pthread
扩展来设置线程化TCP服务器。我知道,它没有得到官方的支持,但我尝试过这样做:

class luokka extends Thread {
    private $client;
    public function __construct($socket) {
        $this->client = $socket;
        $this->start(); // Starts the threading
    }
    public function run() {
        while (true) {
            $data = socket_read($this->client, 128);
            if ($data === false) {
                // Error, or client disconnection = break
            }
            // ...
        }
    }
}

$clients = array();

while (1) {
    if (($sox = socket_accept($server)) !== false) {
        $clients[] = new luokka($sox);      
    }
}
但是,读取客户端发送的数据在成功后返回false,并且在成功后仍在运行。只有服务器被设置为非阻塞模式,以允许在主无限循环中进行其他操作。当我从服务器关闭客户端连接时,客户端没有检测到它(关于错误结果?)。当客户端关闭连接时,服务器在读取时不会将其检测为false。怎么办


那么,在结束时,如何从
$clients
数组中删除特定于客户端的类?转储此变量会在类中显示“NULL”。

您需要在线程上带有条件的情况下关闭while

$this->running = true;    
while $this->running) {
     $data = socket_read($this->client, 128);
     if ($data === false) {
         $this->running = false;       
    }         
}
将$clients上运行的var更改为false以完成线程,对不起,我的英语是haahha