|
|
|
Лимит по времени, как сделать?
|
|||
|---|---|---|---|
|
#18+
Есть список прокси CREATE TABLE IF NOT EXISTS `sa_proxy` ( `id_proxy` int(11) NOT NULL AUTO_INCREMENT, `ip_address` varchar(45) DEFAULT NULL, `date` timestamp NULL DEFAULT CURRENT_TIMESTAMP, `last_use` timestamp NULL DEFAULT NULL, `proxy_status` varchar(45) DEFAULT NULL, `proxy_type` set('http','socks') DEFAULT NULL, `port` mediumint(9) DEFAULT NULL, `login` varchar(45) DEFAULT NULL, `password` varchar(45) DEFAULT NULL, `id_proxy_group_fk` int(11) NOT NULL, PRIMARY KEY (`id_proxy`), KEY `fk_sa_proxy_sa_proxy_group1` (`id_proxy_group_fk`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1005 ; Эти прокси используются, каждое использование заносится в таблицу CREATE TABLE IF NOT EXISTS `sa_proxy_used` ( `id_proxy` int(11) NOT NULL, `date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, `action` varchar(64) NOT NULL, KEY `id_proxy` (`id_proxy`,`date`,`action`), KEY `id_proxy_2` (`id_proxy`), KEY `action` (`action`), KEY `date` (`date`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; Иногда прокси бывают заблокированны сервисом и заносятся во временный блок CREATE TABLE IF NOT EXISTS `sa_proxy_block` ( `idsa_proxy_block` int(11) NOT NULL AUTO_INCREMENT, `action` varchar(45) DEFAULT NULL, `date` timestamp NULL DEFAULT CURRENT_TIMESTAMP, `date_block_off` timestamp NULL DEFAULT NULL, `id_proxy_fk` int(11) NOT NULL, PRIMARY KEY (`idsa_proxy_block`), KEY `fk_sa_proxy_block_sa_proxy1` (`id_proxy_fk`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Сведения о блокировках прокси' AUTO_INCREMENT=2 ; Как можно сделать ограничения: использовать прокси не чаще чем раз в Х секунд (с момента прошлого запуска) использовать прокси не чаще чем X раз в течении Y секунд (например не более 100использований за 180 секунд) не использовать заблокированные прокси для прокси есть распаралеливание под разные действия action, например загружать информацию с сайта 1 или сайта 2. Если для сайта 1 уже есть ограничение Xзапусков в Y секунд то для сайта 2 ограничение не действует может быть заблокированно прокси, когда оно считается нерабочим. у меня получился такой запрос, но что то он кажется совсем не оптимальным и не рабочим. $count_use = 20000; // Ограничение на использование прокси за периоды было 50 $period = 60*45; // Период в течении которого считать прокси использованным $delay = 1; // Задержка в использовании прокси для данного действия. (использовать прокси не чаще чем раз в 8 секунд) $this->db->select('sa_proxy.*, count(sa_proxy_used.id_proxy) as count, max(sa_proxy_used.date) as last_use'); $this->db->from('sa_proxy'); $this->db->join('sa_proxy_block', ' sa_proxy_block.id_proxy_fk = sa_proxy.id_proxy and `sa_proxy_block`.`date_block_off` > \''.date('Y-m-d H:i:s').'\' and sa_proxy_block.action = \''.mysql_real_escape_string($action).'\'', 'left', false); $this->db->join('sa_proxy_used', 'sa_proxy_used.id_proxy = sa_proxy.id_proxy', 'left', false); $this->db->where('sa_proxy_block.id_proxy_fk',NULL); $this->db->where(' ( sa_proxy_used.date > "'.date( 'Y-m-d H:i:s', time()-intval($period)).'" OR sa_proxy_used.date IS NULL )',NULL,FALSE ); // Обрезаем по дате использования прокси (что бы использовать не более N раз за период ) $this->db->group_by('sa_proxy.id_proxy'); // Группируем что бы посчитать колличество использований прокси $this->db->order_by('count', 'desc'); // Берем те которые уже использовали, если они не заблокированны $this->db->having('count <', $count_use); $this->db->having(' ( last_use < "'. date( 'Y-m-d H:i:s', time()-intval($delay)).'" OR last_use IS NULL )', NULL, FALSE); $this->query = $this->db->get(); $this->proxy_active = $this->query->result_array(); Подскажите пожалуйста как можно сделать, с моей стороны гарантирую вознаграждение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2013, 09:17:50 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=38469398&tid=1835700]: |
0ms |
get settings: |
6ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
50ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
27ms |
get tp. blocked users: |
1ms |
| others: | 233ms |
| total: | 348ms |

| 0 / 0 |
