控制使用某些参数加载php类的次数
我有一个php类,它通过ssh连接到某些设备。 我想添加逻辑来控制每个设备的连接数。 这就是我的类构造函数的外观:控制使用某些参数加载php类的次数,php,Php,我有一个php类,它通过ssh连接到某些设备。 我想添加逻辑来控制每个设备的连接数。 这就是我的类构造函数的外观: public function __construct($hostname, $password, $username = "", $timeout = 10) { set_include_path(get_include_path() . PATH_SEPARATOR . '/var/www/phpseclib'); include_on
public function __construct($hostname, $password, $username = "", $timeout = 10)
{
set_include_path(get_include_path() . PATH_SEPARATOR . '/var/www/phpseclib');
include_once('Net/SSH2.php');
$this->_hostname = $hostname;
$this->_password = $password;
$this->_username = $username;
} // __construct
我读过其他一些帖子,比如:
我想我只想确认以下几点:
public function\u构造($hostname)
{
如果(!确定连接($hostname))
{
出口
}
}
公用功能正常连接($hostname)
{
$filelist=glob($counterslocation.$hostname.'*.tmp');
如果(计数($filelist)<4){
$handle=fopen($counterslocation.$hostname.rand(1,4)。“.tmp”,“r”);
返回true;
}
否则{
返回false;
}
}
在我已经有4个活动连接的情况下,在构造函数中调用exit()是否仍然会引发析构函数?这意味着析构函数将尝试删除其中一个临时文件,即使ok_to_connect()函数实际上没有创建文件。我想我可以让ok_to_connect()方法在类中设置一个公共变量,并让析构函数在删除任何文件之前检查这一点。
这是最好的方法吗?我在这里看到了两种解决方案 1-使用内存缓存(如APC)。当然,如果服务器重新启动,您将失去计数器,但您可能也会失去ssh连接。 要使用APC处理并发问题,您可以查看 2-使用数据库: php中包含的一个非常轻的数据库,如sqlite,将提供与内存解决方案相反的计数器持久性 数据库解决方案更健壮,但速度较慢。在重新启动的情况下,由于持久性,您还需要清理所有计数器
你只需要知道你的数据有多重要就可以选择好的解决方案。你可以
- 在
上,在公共目录中创建一个文件\u construct
- 然后在
上删除该文件\u destruct
这样,您就不会有同步写入操作的问题。文件总数将显示打开的连接数。1。)对于每个连接,您可以在公共目录中创建一个带有随机文件名的文件。这样,您就不会有写/更新问题。当然,如果你有大量的联系,这可能会有问题;这不应该被移动,因为这不是具体问题。这是一个观察者可以很好解决的问题吗?@yoshi,如果我使用随机文件名创建,我如何跟踪我有多少个连接?对不起,你能澄清一下吗?谢谢。@dot只需计算目录中的文件数即可。。)当然,
\uu destruct
需要删除与该特定连接关联的文件。@dot我个人会将确定\u连接
分为两种方法。作为一个方法/函数,它应该只做一件事。当前的一个正在做两个。检查连接是否正常,如果正常,创建tmp文件。我认为您应该有第二个方法create\u connection\u file
,您可以从构造函数调用它,以防ok\u to\u connect
返回true。
public function __construct($hostname)
{
if (! ok_to_connect($hostname) )
{
exit;
}
}
public function ok_to_connect($hostname)
{
$filelist = glob($counterslocation.$hostname.'*.tmp');
if ( count($filelist) < 4) {
$handle = fopen($counterslocation.$hostname.rand(1,4).".tmp", "r");
return true;
}
else {
return false;
}
}
if(!apc_exists($this->_hostname)) {
apc_store($this->_hostname,1);
} else {
apc_inc($this->_hostname);
}