I. Служба TCP
TCP-сервер
Давайте взглянем на руководство по введению в официальные документы swool – > быстрый запуск – > создайте TCP-сервер, один раз запустите пример кода документа и увидите следующий эффект:
сервер. php
set([
'worker_num' = > 8, // the number of worker processes is 1-4 times of the CPU
'max_request' => 10000,
]);
//Listen for connection entry events
/**
*$FD unique identification of client connection
*$reactor? ID thread ID
*/
$serv->on('Connect', function ($serv, $fd, $reactorId) {
echo "Client: {$reactorId}-{$fd}-Connect.\n";
});
//Listening for data receiving events
$serv->on('Receive', function ($serv, $fd, $reactorId, $data) {
$serv->send($fd, "Server: {$reactorId} - {$fd} ".$data);
});
//Listen for connection closing events
$serv->on('Close', function ($serv, $fd) {
echo "Client: Close.\n";
});
//Start server
$serv->start();Давайте сначала включим службу, а затем передадим команду telnet , чтобы открыть два окна соответственно для подключения службы
[email protected]:/work/study/code/swoole/demo/server# php server.php Client: 0-1-Connect. Client: 1-2-Connect.
Клиент 0:
[email protected]:/# telnet 127.0.0.1 9501 Trying 127.0.0.1... Connected to 127.0.0.1. Escape character is '^]'. hello Server: 0 - 1 hello
Клиент 1:
[email protected]:/# telnet 127.0.0.1 9501 Trying 127.0.0.1... Connected to 127.0.0.1. Escape character is '^]'. hello Server: 1 - 2 hello
TCP-клиент
tcp tcp
connect("127.0.0.1", 9501)){
echo 'Connect error';
exit;
}
//PHP cli constant
Fwrite (stdout, "please enter message");
$msg = trim(fgets(STDIN));
//Send message to TCP server server
$client->send($msg);
//Receive data from server
$res = $client->recv();
echo $res;Выполните сценарий:
php tcp_client.php
Печать:
[email protected]:~# /work/study/soft/php/bin/php /work/study/code/swoole/demo/client/tcp_client.php Please enter message 3 Server: 0 - 3 3
II. Служба UDP
UDP-сервер отличается от TCP-сервера, UDP не имеет понятия о соединении. После запуска сервера клиенту не требуется подключение, и он может напрямую отправлять пакеты данных на порт 9502, контролируемый сервером. Соответствующее событие находится в пакете.
Давайте посмотрим Руководство по введению официального документа swool – > быстрый запуск – > создание UDP-сервера
udp _server.php
on('Packet', function ($serv, $data, $clientInfo) {
$serv->sendto($clientInfo['address'], $clientInfo['port'], "Server ".$data);
var_dump($clientInfo);
});
//Start server
$serv->start();Начать обслуживание:
php udp_server.php
UDP-сервер может использовать netcat -u Для подключения теста
netcat -u 127.0.0.1 9502 hello Server: hello
После того, как клиент подключится и отправит данные, сервер распечатает соответствующую информацию клиента:
# php udp_server.php
array(4) {
["server_socket"]=>
int(3)
["server_port"]=>
int(9502)
["address"]=>
string(9) "127.0.0.1"
["port"]=>
int(40627)
}III. TCP и UDP
TCP (протокол управления передачей): это ориентированный на соединение, надежный протокол передачи данных на основе байтового потока.
UDP (Протокол пользовательских дейтаграмм): это протокол транспортного уровня без подключения, который предоставляет простые и ненадежные услуги передачи информации, ориентированные на транзакции.
1. Разница между TCP и UDP
- 1, TCP
ориентирован на соединениеOf, UDPБез подключенияOf (вам не нужно устанавливать соединение перед отправкой данных) - 2. TCP предоставляет надежные услуги (данные, передаваемые через TCP). Без ошибок, без потерь, без повторения и прибытия в последовательности); UDP обеспечивает простую и ненадежную передачу, ориентированную на транзакции.
- 3. UDP имеет лучшее
Реальное времяОн подходит для высокоскоростной передачи и высокой связи в режиме реального времени или широковещательной связи. С увеличением скорости сети UDP используется все больше и больше. - 4. Никакое TCP-соединение не может быть только двухточечным. UDP поддерживает взаимодействие один к одному, один ко многим и многие ко многим.
- 5. TCP требует больше системных ресурсов, а UDP требует меньше системных ресурсов
- 6. Структура программы UDP проще
- 7. TCP-это режим потока, а UDP – режим дейтаграммы
2. Почему UDP иногда более выгоден, чем TCP?
UDP с его преимуществами простоты и быстрой передачи заменил TCP во все большем количестве сценариев, таких как игры в реальном времени. (1) повышение скорости сети обеспечивает надежную сетевую гарантию стабильности UDP, а скорость потери пакетов очень низкая. Если для повторной передачи используется прикладной уровень, то может быть обеспечена надежность передачи. (2) для обеспечения надежности сетевой связи TCP использует сложный алгоритм управления перегрузкой и устанавливает утомительный процесс рукопожатия. Очень сложно улучшить TCP из-за его встроенного системного стека протоколов.
В случае TCP, как только произойдет потеря пакетов, TCP будет кэшировать последующие пакеты, ждать повторной передачи предыдущих пакетов и продолжать отправку после получения, и задержка будет становиться все больше и больше. Основываясь на строгих требованиях UDP для реального времени, определяемый пользователем механизм повторной передачи может свести к минимуму задержку, вызванную потерей пакетов, и свести к минимуму влияние сетевых проблем на игровой процесс.
3. Почему протокол TCP не подходит для передачи в реальном времени?
Протокол TCP не влияет на производительность в реальном времени, поскольку для обмена данными требуется время. Рукопожатие будет в порядке, как только оно установится.
Вообще говоря, поток данных, передаваемый в единицу времени, является относительно плавным и зависит от скользящего окна для управления потоком. Размер раздвижного окна является адаптивным. Есть два основных фактора, которые влияют на раздвижное окно. Один из них-задержка в сети, другой-скорость передачи. Размер скользящего окна пропорционален задержке и скорости передачи. В данной сетевой среде задержку можно считать фиксированной, поэтому скользящее окно связано только со скоростью передачи. При передаче данных в реальном времени, поскольку поток данных относительно фиксирован, скользящее окно TCP будет иметь фиксированное значение, которое не является большим или маленьким. Это значение просто гарантирует, что текущие производственные данные передаются другой стороне в режиме реального времени, В случае потери сетевых пакетов, согласно протоколу TCP (быстрое восстановление), скользящее окно будет уменьшено до половины исходного, поэтому скорость будет немедленно уменьшена вдвое. В это время в
4. Сценарий применения:
Например, для обычных видеоизображений конференций, аудио и обычных данных предпочтителен UDP. В конце концов, не имеет значения, сколько пакетов вы потеряете. Если вы передаете файлы, вы не можете потерять пакеты. Используйте TCP.
5. Как реализовать надежную передачу UDP
UDP не относится к протоколу подключения, поэтому он обладает преимуществами низкого потребления ресурсов и высокой скорости обработки. Поэтому UDP часто используется при передаче аудио, видео и обычных данных, потому что даже если они иногда теряют один или два пакета, они не окажут большого влияния на полученные результаты. Уровень передачи не может гарантировать надежную передачу данных, только через прикладной уровень. Способ реализации может относиться к способу надежной передачи TCP, но реализация не находится на уровне передачи, а реализация переносится на уровень приложения.
Статьи по теме Различия, преимущества и недостатки между TCP и UDP Что такое TCP, UDP и разница между ними