gpt4 book ai didi

php - PHP线程化TCP套接字服务器

转载 作者:行者123 更新时间:2023-12-03 12:04:46 25 4
gpt4 key购买 nike

我正在尝试使用pthread扩展名为PHP设置线程化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,并且此后仍在运行。在主无限循环中,仅将服务器设置为非阻塞模式以允许其他操作。当我从服务器关闭客户端连接时,客户端不会检测到该连接(关于错误结果?)。当客户端关闭连接时,服务器在读取时不会将其检测为假。该怎么办?

然后,当结束时,如何从 $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。

关于php - PHP线程化TCP套接字服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31459226/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com