我对PHP中的并行套接字连接有疑问。 我不是套接字专家,所以才在这里问这个问题。 我创建了一个库,可以在PHP中持久存储数据(字符串/整数/浮点数/数组/对象或无损可序列化的任何东西),例如缓存。我提供了部分代码,我认为这会导致问题,但是如果您需要其他信息,请访问:https://github.com/dude920228/php-cache
概念是:
它像具有25个并行连接的超级按钮一样工作,但是由于某些原因,客户端没有收到他们应该获取的数据。在100个并行连接时,只有大约一半的客户端可以获取数据。该程序不会发出任何错误,并且我使用的唯一错误控制运算符是在主循环中的socket_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_select
电话吗?还是其他班的问题?预先感谢您的回答!