Мы уже начали рассказывать Вам о том как работать с Human Emulator во многопоточном режиме.
В этой статье мы расскажем как запускать несколько копий Хумана из bat-файла.
Для начала: bat-файлы или точнее пакетные или batch файлы это обычные текстовые файлы,
содержащие наборы команд интерпретатора и имеющие расширение bat.
Редактировать такие файлы можно при помощи блокнота или любого другого текстового редактора.
Детальнее про них можно посмотреть на википедии,
а так же тут.
В нашем случае нас интересует запуск программ из bat-файла. Для этого используется команда start и для запуска Human Emulator
эта команда будет выглядеть следующим образом:
start «XWeb Human Emulator» «C:\Xweb MT\Human Emulator\XWeb Human Emulator.exe» /port:»7010″ /script:“D:\scripts\script7010.php”
где:
«XWeb Human Emulator» — заголовок, выводимый в области заголовка окна.
«C:\Xweb MT\Human Emulator\XWeb Human Emulator.exe» /port:»7010″ /script:“D:\scripts\script7010.php”
— путь для запуска exe-ника с параметрами командной строки. Это /port:»7010″ порт, на котором запускать программу и
/script:“D:\scripts\script7010.php” скрипт, который надо запускать при старте Human Emulator.
Теперь запишем bat-файл для запуска 5 копий хуман эмулятора. Этот файл будет выглядеть следующим образом:
start «XHE» «C:\XWeb MT\Human Emulator 7011\XWeb Human Emulator MT.exe» /port:»7011″ /script:»C:\XWeb MT\Human Emulator 7011\My Scripts\proxy\check_proxy.php» /script_args:»7011 » /in_tray:»true»
ping -n 1 -w 5000 192.168.254.254 >nul
start «XHE» «C:\XWeb MT\Human Emulator 7012\XWeb Human Emulator MT.exe» /port:»7012″ /script:»C:\XWeb MT\Human Emulator 7012\My Scripts\proxy\check_proxy.php» /script_args:»7012 » /in_tray:»true»
ping -n 1 -w 5000 192.168.254.254 >nul
start «XHE» «C:\XWeb MT\Human Emulator 7013\XWeb Human Emulator MT.exe» /port:»7013″ /script:»C:\XWeb MT\Human Emulator 7013\My Scripts\proxy\check_proxy.php» /script_args:»7013 » /in_tray:»true»
ping -n 1 -w 5000 192.168.254.254 >nul
start «XHE» «C:\XWeb MT\Human Emulator 7014\XWeb Human Emulator MT.exe» /port:»7014″ /script:»C:\XWeb MT\Human Emulator 7014\My Scripts\proxy\check_proxy.php» /script_args:»7014 » /in_tray:»true»
ping -n 1 -w 5000 192.168.254.254 >nul
start «XHE» «C:\XWeb MT\Human Emulator 7015\XWeb Human Emulator MT.exe» /port:»7015″ /script:»C:\XWeb MT\Human Emulator 7015\My Scripts\proxy\check_proxy.php» /script_args:»7015 » /in_tray:»true»
ping -n 1 -w 5000 192.168.254.254 >nul
Как мы видим тут добавилась строка ping -n 1 -w 5000 192.168.254.254 >nul. Это строка необходима нам для паузы между запуском
следующей копии Хумана.
Так же добавились аргументы командной строки самого Хумана: /script_args:»7011 » /in_tray:»true».
Аргумент /script_args служит для передачи аргументов внутрь скрипта, а /in_tray за сворачивание при старте Хумана в трэй.
Нужно отметить, что с помощью /script_args можно передавать в скрипт любое количество аргументов.
Для передачи их в скрипт используется запись /script_args «7015 аргумент1 аргумент2 и т.д. «.
Для получения этих аргументов в скрипте используется $argv — массив переданных скрипту аргументов, где:
$argv[0] — это всегда путь к скрипту, а $argv[1]- порт.
Остальные аргументы будут находиться в элементах массива $argv, начиная со второго, то есть: $argv[2] — аргумент1,
$argv[3] — аргумент1, $argv[4] — т.д.
Приведённый выше пример bat-файла запускает 5 Human Emulator, которые заранее были раскопированы по папкам
Human Emulator 7011, Human Emulator 7012, Human Emulator 7013, Human Emulator 7014, Human Emulator 7015.
Мы можем сделать запуск 5 копий программы и скрипта из одной папки. Для этого в скрипте в переменной $xhe_host нужно
поменять явное указание порта, на $argv[1], то есть в результате будем иметь $xhe_host =»127.0.0.1:».$argv[1];
Пример скрипта подготовленного для запуска в нескольких копиях программы:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<?php // эта строка нужна для того, что бы Хуман не пытался изменить порт // с $argv[1] на текущий указанный в настройках программы $xhe_host ="127.0.0.1:7010"; // сюда мы получаем порт из аргументов командной строки $xhe_host ="127.0.0.1:".$argv[1]; // The following code is required to properly run XWeb Human Emulator require("../Templates/xweb_human_emulator.php"); // выведим строку - путь к скрипту, который запустили и порт echo "Запустили скрипт ".$argv[0]." на порту ".$argv[1]; // Quit $app->quit(); ?> |
Если в скрипте нужно работать с какими-то файлами, то для того что бы каждая копия работала со своим файлом можно добавить в
имена файлов $argv[1], например:
1 2 |
// счетчик (ак-в и постов) $str_cur_path = "data/i_cur$argv[1].txt"; |
Для запуска нескольких Human Emulator из одной папки и одного и того же скрипта наш bat-файл будет выглядеть следующим образом:
start «XHE» «C:\XWeb MT\Human Emulator\XWeb Human Emulator MT.exe» /port:»7011″ /script:»C:\XWeb MT\Human Emulator\My Scripts\proxy\check_proxy.php» /script_args:»7011 » /in_tray:»true»
ping -n 1 -w 5000 192.168.254.254 >nul
start «XHE» «C:\XWeb MT\Human Emulator\XWeb Human Emulator MT.exe» /port:»7012″ /script:»C:\XWeb MT\Human Emulator\My Scripts\proxy\check_proxy.php» /script_args:»7012 » /in_tray:»true»
ping -n 1 -w 5000 192.168.254.254 >nul
start «XHE» «C:\XWeb MT\Human Emulator\XWeb Human Emulator MT.exe» /port:»7013″ /script:»C:\XWeb MT\Human Emulator\My Scripts\proxy\check_proxy.php» /script_args:»7013 » /in_tray:»true»
ping -n 1 -w 5000 192.168.254.254 >nul
start «XHE» «C:\XWeb MT\Human Emulator\XWeb Human Emulator MT.exe» /port:»7014″ /script:»C:\XWeb MT\Human Emulator\My Scripts\proxy\check_proxy.php» /script_args:»7014 » /in_tray:»true»
ping -n 1 -w 5000 192.168.254.254 >nul
start «XHE» «C:\XWeb MT\Human Emulator\XWeb Human Emulator MT.exe» /port:»7015″ /script:»C:\XWeb MT\Human Emulator\My Scripts\proxy\check_proxy.php» /script_args:»7015 » /in_tray:»true»
ping -n 1 -w 5000 192.168.254.254 >nul
Так же можно запускать несколько копий и каждой копии отдавать свой скрипт.
Для этого просто нужно будет указать этот скрипт в /script:»C:\XWeb MT\Human Emulator\My Scripts\proxy\check_proxy.php»
НО как показывает практика запуск нескольких копий программы из одной папки и одного и того же скрипта с использованием
передачи в него аргументов, работает менее надёжно, чем запуск программы и скриптов из разных папок.
Ну и на последок пример кода скрипта Human Emulator, который сам создаёт бат-файл и запускает его на выполнение:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
// количество всех файлов для записи // в зависимости от этого кол-ва будет // запускаться нужное число потоков $i_count_files = 5; // стартовый порт для запуска потоков $i_st=7011; // закрыть другие потоки перед запуском новых $cnt=$i_st+$i_count_files; for($i=$i_st;$i<$cnt;$i++) { exec("taskkill.exe /F /IM \"XWeb Human Emulator MT RT.exe\" /T"); sleep(2); } $str=""; // запустить другие потоки через bat файл for($i=$i_st;$i<$cnt;$i++) $str=$str."start \"XHE\" \"C:\XWeb MT\Human Emulator $i\XWeb Human Emulator MT RT.exe\" /port:\"$i\" /script:\"C:\XWeb MT\Human Emulator $i\My Scripts\proxy\check_proxy.php\" /script_args:\"$i \" /in_tray:\"true\" \r\n ping -n 1 -w 5000 192.168.254.254 >nul\r\n"; $app->run_as_bat($str,"1.bat",false); |