Мы уже начали рассказывать Вам о том как работать с 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];

Пример скрипта подготовленного для запуска в нескольких копиях программы:

 
<?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], например:

 
// счетчик (ак-в и постов)
$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, который сам создаёт бат-файл и запускает его на выполнение:

 
// количество всех файлов для записи
// в зависимости от этого кол-ва будет
// запускаться нужное число потоков
$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);

Добавить комментарий

*
*

Необходимые поля отмечены*