PHP套接字多个客户端读/写
我有一个关于PHP中的并行套接字连接的问题。 我不是插座专家,所以我在这里问这个问题。 我创建了一个库,它能够在PHP中持久化数据(string/int/float/array/object或任何可以无损序列化的数据),比如缓存。我提供了我的代码的一部分,我认为这是导致问题的原因,但是如果您需要其他信息,请访问: 这一概念是:PHP套接字多个客户端读/写,php,sockets,caching,tcp,Php,Sockets,Caching,Tcp,我有一个关于PHP中的并行套接字连接的问题。 我不是插座专家,所以我在这里问这个问题。 我创建了一个库,它能够在PHP中持久化数据(string/int/float/array/object或任何可以无损序列化的数据),比如缓存。我提供了我的代码的一部分,我认为这是导致问题的原因,但是如果您需要其他信息,请访问: 这一概念是: 创建TCP套接字服务器 接受连接 从连接客户端读取序列化的PHP数组 调用从客户机接收的操作的操作处理程序,并在必要时对发送的数据进行处理,或者写回客户机 关闭客户端上
- 创建TCP套接字服务器
- 接受连接
- 从连接客户端读取序列化的PHP数组
- 调用从客户机接收的操作的操作处理程序,并在必要时对发送的数据进行处理,或者写回客户机
- 关闭客户端上的连接
socket\u accept
调用。主循环如下所示:
public function run()
{
$this->socket = $this->ioHandler->createServerSocket();
while ($this->running) {
$this->maintainer->checkBackup(time(), $this->bucket);
$this->maintainer->maintainBucket($this->bucket);
if (($connection = @socket_accept($this->socket))) {
$clientId = uniqid();
socket_set_nonblock($connection);
$this->clients[$clientId] = $connection;
$read = $this->clients;
$write = array();
$except = array();
socket_select($read, $write, $except, null);
$dataString = $this->ioHandler->readFromSocket($connection);
$data = unserialize($dataString);
($this->actionHandler)($data, $this->bucket, $this->ioHandler, $connection);
$this->ioHandler->closeSocket($connection);
unset($this->clients[$clientId]);
}
}
$this->close();
}
我是否误用了
socket\u select
呼叫?或者问题是在另一个班级?提前感谢您的回答 错误抑制操作符(@)几乎总是比它的价值更麻烦。如果您将其删除并重新配置PHP以记录到文件中,而不是打印错误以输出,则调试会更加容易。@GordonM我将错误记录到文件中,因为我将服务器作为linux守护程序运行。该文件的最后一个条目是6月8日,在我在github上发布之前。是否真的是socket\u accept
导致了错误?正如我所看到的,所有数据都会被存储(我记录了传入的数据),但并不是所有的客户机都会将数据返回。这是我在代码中看到的唯一一件可以由于@operator而无声失败的事情,所以在没有@operator的情况下尝试它是值得的。