<MyRusakov.ru />

React JS, Redux, ES2015 с Нуля до Гуру

React JS, Redux, ES2015 с Нуля до Гуру

Данный курс - это обширный курс по JavaScript и фреймворку React, который позволит Вам с нуля создавать мощные современные, динамические JavaScript-приложения.

Вы узнаете о тонкостях работы с "профессиональным" JavaScript, а так же узнаете о нововведениях в его новый стандарт ES2015, Вы узнаете, как организовать профессиональное окружение для FrontEnd, изучите профессиональный фреймворк - ReactJS.

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

Подробнее
Подписка

Подписавшись по E-mail, Вы будете получать уведомления о новых статьях.

Подписка Подписаться

Добавляйтесь ко мне в друзья ВКонтакте! Отзывы о сайте и обо мне оставляйте в моей группе.

Мой аккаунт Мой аккаунт Моя группа
Опрос

Каким движком Вы предпочитаете пользоваться?

Форум сайта MyRusakov.ru

Socket.client\server
25.12.2011 07:03:52 Socket.client\server Сообщение #1
int

int

Освоившийся

Освоившийся

Дата регистрации:
26.10.2011 05:32:04

Сообщений: 32

Здравствуйте, Михаил. На днях задался целью написать клиент\сервер средствами php socket, но столкнулся с банальной проблемой непонимания принципа.
Как отправлять заголовки и информацию посредством сокетов - это более чем понятно.
Не понятен сам алгоритм взаимодействия клиента и сервера. Вот нашел в сети один из немногих подобных примеров. Это код сервера из которого многое не понятно. (Клиента копировать не стал что бы не загружать страницу)

header('Content-Type: text/plain;');
error_reporting(E_ALL ^ E_WARNING);
set_time_limit(0);
ob_implicit_flush();

echo "-= Server =-\n\n";

$address = 'site.ru';
$port = 10001;

try {

echo 'Create socket ... ';
if (($sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) < 0) {
throw new Exception('socket_create() failed: '.socket_strerror(socket_last_error())."\n";
} else {
echo "OK\n";
}

echo 'Bind socket ... ';
if (($ret = socket_bind($sock, $address, $port)) < 0) {
throw new Exception('socket_bind() failed: '.socket_strerror(socket_last_error())."\n";
} else {
echo "OK\n";
}

echo 'Listen socket ... ';
if (($ret = socket_listen($sock, 5)) < 0) {
throw new Exception('socket_listen() failed: '.socket_strerror(socket_last_error())."\n";
} else {
echo "OK\n";
}

do {
echo 'Accept socket ... ';
if (($msgsock = socket_accept($sock)) < 0) {
throw new Exception('socket_accept() failed: '.socket_strerror(socket_last_error())."\n";
} else {
echo "OK\n";
}

$msg = "Hello, Client!";
echo "Say to client ($msg) ... ";
socket_write($msgsock, $msg, strlen($msg));
echo "OK\n";

do {

echo 'Client said: ';
if (false === ($buf = socket_read($msgsock, 1024))) {
throw new Exception('socket_read() failed: '.socket_strerror(socket_last_error())."\n";
} else {
echo $buf."\n";
}

if (!$buf = trim($buf)) {
continue;
}

if ($buf == 'shutdown') {
socket_close($msgsock);
break 2;
}

echo "Say to client ($buf) ... ";
socket_write($msgsock, $buf, strlen($buf));
echo "OK\n";

} while (true);

} while (true);

} catch (Exception $e) {
echo "\nError: ".$e->getMessage();
}

if (isset($sock)) {

echo 'Close socket ... ';
socket_close($sock);
echo "OK\n";

}



Не могли бы Вы просто описать алгорим работы, не кодом, а обычным языком? "AF_INET, SOCK_STREAM, SOL_TCP" - Эти параметры мне понятны. Нашел по ним информацию в факах языка C++.
Профиль Ответить
25.12.2011 12:27:11 Socket.client\server Сообщение #2
Admin

Admin

Администратор

Администратор

Дата регистрации:
27.05.2010 21:23:42

Сообщений: 3063

Я пробегусь по основным моментам:
1) Делается динамический вывод (ob_implicit_flush(). Это означает, что не нужно использовать flush() для мгновенного вывода в выходной поток.
2) Создаётся сокет.
3) Связывается созданный сокет с соответствующим адресом (socket_bind()).
4) Начинается прослушивание сокета, фактически, это ожидание данный от клиента. Причём максимальное количество допустимых соединение 5.
5) Затем начинается бесконечный цикл, в котором сервер ждёт приёма данных от клиента. При получении данных он их считывает и отдаёт клиенту ответ.
6) В самом конце сокет закрывается.
7) Так же здесь полно исключений, которые выбрасываются при самых различных ошибках.
Профиль Ответить
25.12.2011 16:31:26 Socket.client\server Сообщение #3
int

int

Освоившийся

Освоившийся

Дата регистрации:
26.10.2011 05:32:04

Сообщений: 32

Михаил, спасибо Вам. Как оказалось все предельно просто) Просто видимо мне не совсем удачный пример попался) Видимо автор только для себя его писал
Профиль Ответить
01.01.2012 20:54:17 Socket.client\server Сообщение #4
int

int

Освоившийся

Освоившийся

Дата регистрации:
26.10.2011 05:32:04

Сообщений: 32

Еще раз здравствуйте и с новым годом)
С блокирующими сокетами разобрался, теперь пробую построить приложение клиенты\сервер на неблок сокетах.
Скажите, Михаил .. не абсурдно ли на php заниматься настолько низкоуровневым сетевым программированием? Просто смотрю справочник функций sock PHP и везде есть приписка "тестовая функция" и тому подобное. Что бы Вы предпочли, допустим, для создания чата на локалхосте? perl,c++ или все таки PHP им ни чем уступает в общем? Про однопоточность php знаю.

П.с Вообще тема сетевого программирования меня очень заинтересовала. Начал с PHP потому что на этом языке проще понять принципы и потом уже переходить на другие, более мощные деск языки, в частности на тот же с++ . Везде winsock ведь подобен.
Надеюсь вопросы задал понятно
Профиль Ответить
01.01.2012 22:47:47 Socket.client\server Сообщение #5
Admin

Admin

Администратор

Администратор

Дата регистрации:
27.05.2010 21:23:42

Сообщений: 3063

Не очень понимаю, зачем для чата нужен PHP. Сколько раз его делал, всегда хватало стандартных и проверенных функций, а также iframe, либо JQuery+Ajax.
Профиль Ответить