Ciko

Варианты построения сети

1 сообщение в этой теме

Варианты построения сети

О том как использовать несколько машин для PHP и MySQL, чтобы распределить нагрузку.

Эта глава предназначена тем, кто размещаете свое приложение не на чужом сервере, а на своем и пользуется своей собственной линией выхода в Интернет. Во-первых, разрешите вас поздравить с таким богатством, так как вы – одни из немногих, кто себе может позволить такую роскошь. Скорей всего у вас есть внутренняя локальная сеть, которая через прокси смотрит в Интернет. На прокси-сервере расположен и Web-сервер, с помощью которого вы выставили в Интернет Web-узел своей компании или организации. Понятно, что установка дополнительных программ увеличит нагрузку на сервер, который мы уверены и без того загружен.

Мы предлагаем решение, которое позволит распределить нагрузку по двум машинам и значит увеличить скорость работы PHP-приложений, взаимодействующих с базой данных.

Первый вариант изображен на Рис. 27. В Интернет выносятся две машины. На одной устанавливается Web-сервер и PHP, а на другой сервер MySQL. При обращении к базе данных с помощью функции mуsql_connect() вы указываете не как обычно localhost, а IP-адрес соседней машины.

Например:

IP-адрес первой машины 226.117.45.2

IP-адрес второй машины 226.117.45.7

Тогда в PHP-странице, что работает на первой машине будет строка

mуsql_connect("226.117.45.7",$db);

Недостаток этой схемы в том, что для второй машины требуется дополнительный IP-адрес. С другой стороны к вашей базе данных могут обратиться из других PHP-страниц, которые хранятся на других машинах в Интернете.

Вторая схема, изображенная на Рис. 28, еще более изощренная. В локальной сети выбирается машина, на которую устанавливается сервер MySQL. При обращении к базе данных с помощью функции mуsql_connect() вы опять-таки указываете IP-адрес второй машины.

Например:

IP-адрес первой машины: 226.117.45.2 – по такому адресу она видна из Интернета,

192.168.0.5 – по такому адресу она видна внутри сети

IP-адрес второй машины 192.168.0.104 - по такому адресу она видна внутри сети, а из Интернета не видна

Тогда в PHP-странице, что работает на первой внешней машине будет строка:

mуsql_connect("192.168.0.104",$db);

 

 

Пример создания законченного приложения

Создадим простой HTML файл-форму.

<HTML>
<HEAD>
<TITLE>Запрос информации</TITLE>
<BODY>
<CENTER>
Хотите больше знать о наших товарах?
<P>
<TABLE WIDTH = 400><TR><TD align = right>
<FORM ACTION="email.php3" METHOD="POST">
Ваше имя:<BR>
<INPUT TYPE="text" NAME="name" SIZE="20" MAXLENGTH="30">
<P>
Ваш email:<BR>
<INPUT TYPE="text" NAME="email" SIZE="20" MAXLENGTH="30">
<P>
Меня интересуют:
<SELECT NAME="preference">
<OPTION value = "Яблоки">Яблоки
<OPTION value = "Апельсины">Апельсины
</SELECT>
<P>
<INPUT TYPE="submit" VALUE="Отправить запрос!">
</FORM>
</TD></TR></TABLE></CENTER>
</BODY>
</HTML>

Рис. 29

Назовем этот файл request.html. В нем мы указали, что данные формы будут обрабатываться файлом email.php3. Приведем его содержание:

<?
/* Этот скрипт получает переменные из request.html */
PRINT "<CENTER>";
PRINT "Привет, $name.";
PRINT "<BR><BR>";
PRINT "Спасибо за ваш интерес.<BR><BR>";
PRINT "Вас интересуют $preference. Информацию о них мы пошлем вам на email: $email.";
PRINT "</CENTER>";
?>

Рис. 30

Теперь, если пользователь вызовет request.html и наберет в форме имя “Вася”, email: vasya@pupkin.com и скажет, что его интересуют “Яблоки”, а после этого нажмет "Отправить запрос!", то на экране появится следующий текст:

Привет, Вася

Спасибо за ваш интерес.

Вас интересуют Яблоки. Информацию о них мы пошлем вам на email: vasya@pupkin.com

Рис. 31

Давайте усложним пример. Мы должны сдержать обещание и выслать email.

Для этого в PHP есть функция MAIL.

void mail(string to, string subject, string message, string add_headers);

to – email адрес получателя.

subject – тема письма.

message – собственно текст сообщения.

add_headers – другие параметры заголовка письма (необязательный параметр).

Допишем в конец файла email.php3 следующий код:

<?
mail($email, "Запрос на информацию", "$name\n
Спасибо за ваш интерес!\n
Вас интересуют $preference\n
Мы их распространяем бесплатно. Обратитесь в ближайший филиал нашей компании и получите ящик этого продукта.\n
");
mail("administration@me.com",
"Был запрос на информацию.",
"$name интересовали $preference\n
email-адрес: $email. \n");
?>

Рис. 32

Вот теперь пользователь будет получать письмо с более подробной информацией о наших товарах. Также письмо получит и администратор сайта.

Когда интересующихся нашими товарами станет очень много, мы захотим их как-то упорядочить и хранить информацию о них в базе данных.

Теперь наш файл email.php3 будет иметь следующий вид:

<?
/* Этот скрипт получает переменные из request.html */

/* Некоторые переменные */

$hostname = "localhost";
$username = "myusername";
$password = "mypassword";
$dbName = "products";

/* Таблица MySQL, в которой хранятся данные */
$userstable = "clients";

/* email администратора */
$adminaddress = "administration@me.com";

/* создать соединение */
$db = mysql_connect($hostname,$username,$password) or die("Не могу создать соединение ");

mysql_select_db("$dbName",$db) or die("Не могу выбрать базу данных "); 

print "<CENTER>";
print "Привет, $name.";
print "<BR><BR>";
print "Спасибо за ваш интерес.<BR><BR>";
print "Вас интересуют $preference. Информацию о них мы пошлем вам на email: $email.";
print "</CENTER>";

/* Отправляем email */
mail($email, "Запрос на информацию", "$namen\n
Спасибо за ваш интерес!\n
Вас интересуют $preference\n
Мы их распространяем бесплатно. Обратитесь в ближайший филиал нашей компании и получите ящик этого продукта.\n
");

mail("administration@me.com",
"Был запрос на информацию.",
"$name интересовали $preference\n
email-адрес: $email. \n");

/* Вставить информацию о клиенте в таблицу */
$query = "INSERT INTO $userstable VALUES('$name','$email', '$preference')";

$result = mysql_query($query);

print "Информация о вас занесена в базу данных.";

/* Закрыть соединение */
mysql_close();
?>

Рис. 33

Теперь кроме письменных уведомлений, информация о клиенте и его интересах будет заносится в таблицу MySQL.

После занесения данных, нас иногда будет интересовать вопрос так кого же из наших клиентов интересует товар “Яблоки” (не путать с Apple Macintosh, по поводу Apple Macintosh см. www.stealthcomp.com).

Напишем скрипт apple.php3

<?/* Скрипт показывает клиентов, которые яблоки любят больше, чем апельсины */
$hostname = "localhost";
$username = "myusername";
$password = "mypassword";
$dbName = "products";

/* Таблица MySQL, в которой хранятся данные */
$userstable = "clients";

/* создать соединение */
mysql_connect($hostname,$username,$password) or die("Не могу создать соединение ");

@mysql_select_db("$dbName") or die("Не могу выбрать базу данных "); 

/* Выбрать всех клиентов - яблочников */
$query = "SELECT * FROM $userstable WHERE choice = 'Яблоки'";

$result = mysql_query($query);

/* Как много нашлось таких */
$number = mysql_numrows($result);

/* Напечатать всех в красивом виде*/
$i = 0;

if ($number == 0)

{
print "<CENTER><P>Любителей яблок нет</CENTER>";
}

elseif ($number > 0)

{
print "<CENTER><P>Количество любителей яблок: $number<BR><BR>";
while ($i < $number)

{
$name = mysql_result($result,$i,"name");
$email = mysql_result($result,$i,"email");
print "Клиент $name любит Яблоки.<BR>";
print "Его Email: $email.";
print "<BR><BR>";
$i++;
}
print "</CENTER>";
}
?>

Рис. 34

Здесь мы использовали две новых функции:

int mysql_num_rows(int result);

Параметры:

result – содержит ID результата запроса.

Функция возвращает количество строк в результате запроса.

 

Вот и все, коммерческий продукт практически готов.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!


Зареєструвати аккаунт

Войти

Уже зарегистрированы? Войдите здесь.


Войти сейчас

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу

Яндекс.Метрика Рейтинг@Mail.ru Индекс цитирования