Синхронність. Асинхронність

Содержание

Слайд 2

Синхронність

VS

Асинхронність

Синхронність VS Асинхронність

Слайд 3

0.5 с

1.0 с

1.5 с

2.0 с

2.5 с

3.0 с

3.5 с

4.0 с

4.5 с

Request

Func()

Foreach(){}

Send responce

Email

SMS

Послідовна модель

0.5 с 1.0 с 1.5 с 2.0 с 2.5 с 3.0 с

Слайд 4

0.5 с

1.0 с

1.5 с

2.0 с

2.5 с

3.0 с

3.5 с

4.0 с

4.5 с

Request

Func()

Foreach(){}

Send responce

Email

SMS

Паралельна модель

0.5 с 1.0 с 1.5 с 2.0 с 2.5 с 3.0 с

Слайд 5

Асинхронно – паралельно?

Асинхронно – паралельно?

Слайд 6

Синхронний однопотоковий

Синхронний багатопотоковий

Асинхронний однопотоковий

Асинхронний багатопотоковий

Синхронний однопотоковий Синхронний багатопотоковий Асинхронний однопотоковий Асинхронний багатопотоковий

Слайд 7

Відправка SMS

Відправити E-mail

Запис в БД

Відправка SMS

Відправити E-mail

Запис в БД

Відправка SMS

Відправити E-mail

Запис в

Відправка SMS Відправити E-mail Запис в БД Відправка SMS Відправити E-mail Запис
БД

Відправка SMS

Відправити E-mail

Запис в БД

Відправка SMS

Відправити E-mail

Запис в БД

Слайд 8

Почнемо з JS

Почнемо з JS

Слайд 9




...



Стартуєм:



Фінішуєм!




Слайд 10




...




...

… ... … ...

Слайд 11

Коротко про CSS

Коротко про CSS

Слайд 12


$(document).ready(function() {
$("head").append("");
})
...

… $(document).ready(function() { $("head").append(" "); }) ...

Слайд 14

PHP традиційно синхронний

але націлений на зміну цієї ситуації

-декілька функції “з коробки”(curl_multi_select() , stream_select())
-декілька

PHP традиційно синхронний але націлений на зміну цієї ситуації -декілька функції “з
бібліотек(Async PHP, ReactPHP, Swoole)

Слайд 15

curl_multi_select()

$ch1 = curl_init(); // Створюєм образ (1) $ch2 = curl_init(); // Створюєм образ (2) curl_setopt($ch1, CURLOPT_URL, " http://admin.drukarka.com.ua/"); // Встановлюєм

curl_multi_select() $ch1 = curl_init(); // Створюєм образ (1) $ch2 = curl_init(); //
URL та опції (1) curl_setopt($ch1, CURLOPT_HEADER, 0); curl_setopt($ch2, CURLOPT_URL, " http://comfart.bluebird.team/ "); // Встановлюєм URL та опції (2) curl_setopt($ch2, CURLOPT_HEADER, 0); $mh = curl_multi_init(); // Створюєм набір дескрипторів curl_multi_add_handle($mh,$ch1); // Вставляємо у дескриптор данні (1) curl_multi_add_handle($mh,$ch2); // Вставляємо у дескриптор данні (2) $active = null; do {     $mrc = curl_multi_exec($mh, $active); } while ($mrc == CURLM_CALL_MULTI_PERFORM);

Слайд 16

stream_select()

stream_select()

Слайд 18

Async
<…>
Websocket

Async Websocket

Слайд 19

0.5 с

1.0 с

1.5 с

2.0 с

2.5 с

3.0 с

3.5 с

4.0 с

4.5 с

Як працює HTTP?

Клієнт

Сервер

Влад

0.5 с 1.0 с 1.5 с 2.0 с 2.5 с 3.0 с

відправив повідомлення: «Hello bluebird!»

Є повідомлення?

Немає!

Є повідомлення?

Немає!

Є повідомлення?

Є!

Hello bluebird!

false

false

false

false

true

Слайд 20

0.5 с

1.0 с

1.5 с

2.0 с

2.5 с

3.0 с

3.5 с

4.0 с

4.5 с

Як працює Websocket?

Клієнт

Сервер

Влад

0.5 с 1.0 с 1.5 с 2.0 с 2.5 с 3.0 с

відправив повідомлення: «Hello bluebird!»

Дай мені знати, як будеш мати повідомлення!

Є!

Hello bluebird!

fakse

true

Слайд 23

Підтримка в браузерах

Підтримка в браузерах

Слайд 24

0.5 с

1.0 с

1.5 с

2.0 с

2.5 с

3.0 с

3.5 с

4.0 с

4.5 с

Як працює Websocket?

Клієнт

Сервер

HandShake
(HTTP

0.5 с 1.0 с 1.5 с 2.0 с 2.5 с 3.0 с
upgrade)

Connection opened

Connection closed

Browser
closed

Слайд 26

socket.onopen = function() {
alert(" З’єднання встановленно!");
};
socket.onclose = function(event) {

socket.onopen = function() { alert(" З’єднання встановленно!"); }; socket.onclose = function(event) {
if (event.wasClean) {
alert(‘З’єднання закрито чисто!');
} else {
alert('Обрив з’єднання!');
}
alert('Код: ' + event.code + ' причина: ' + event.reason);
};
socket.onmessage = function(event) {
alert(“Отриманно данні: " + event.data);
};
socket.onerror = function(error) {
alert(“Помилка: " + error.message);
};

Слайд 27

use Ratchet\Server\IoServer; use Ratchet\Http\HttpServer; use Ratchet\WebSocket\WsServer; use GSoares\RatchetChat\Chat; require dirname(__DIR__) . '/vendor/autoload.php'; $server = IoServer::factory( new HttpServer(

use Ratchet\Server\IoServer; use Ratchet\Http\HttpServer; use Ratchet\WebSocket\WsServer; use GSoares\RatchetChat\Chat; require dirname(__DIR__) . '/vendor/autoload.php';
new WsServer( new Chat() ) ), 8080 ); $server->run();

Слайд 28

public function __construct() { $this->clients = new \SplObjectStorage; } public function

public function __construct() { $this->clients = new \SplObjectStorage; } public function onOpen(ConnectionInterface
onOpen(ConnectionInterface $conn) { $this->clients->attach($conn); echo "New connection! ({$conn->resourceId})\n"; } public function onMessage(ConnectionInterface $from, $msg) { $numRecv = count($this->clients) - 1; echo $from->resourceId, $msg, $numRecv; foreach ($this->clients as $client) { if ($from !== $client) { $client->send($msg); } } } public function onClose(ConnectionInterface $conn) { $this->clients->detach($conn); echo $conn->resourceId . “ disconnected"; } public function onError(ConnectionInterface $conn, \Exception $e) { echo $e->getMessage(); $conn->close(); }

Слайд 31

Apache vs Nginx

Apache vs Nginx