PHP线程TCP套接字服务器
我正在尝试使用PHP的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
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