Как работает открытие сокета на сервере?
Здравствуйте, помогите мне разобраться с сокетами на php и подключениям к ним со стороны клиента, очень много перерыл информаци, но все равно не доходит как это все работает, выделил основные вопросы:
1) В проекте на php у нас есть файл , в котором мы создаём сокет, например tcp://ip:port, там же у нас ожидается подключение к этому сокету, проект загружаем на хостинг, правильно ли я понимаю, что пользователь заходит на сайт, с его браузера отправляются http запросы на ip:80, отображаются страницы и на любой странице мы можем отправить http-запрос на файл, содержащий открытие сокета, после этого он подключается к нему и с любой страницы сайта он сможет уже отправлять данные через этот сокет, при этом другой пользователь заходит на сайта и может подключиться к уже открытому сокету? То есть они оба подключены к сокету и в реальном времени могут через него данными обмениваться?
Если у нас есть такой файл в проекте , который открывает новый сокет, нужно чтобы сначала кто-то из пользователей http-запросом этот файл стригерил? И после этого к нему смогут другие подключаться или мы загружаем проект , сами исполняем этот файл и сокет уже постоянно открыт, а пользователи при заходе уже подключаются к нему?
2) Ещё вот такое вопрос, когда мы на хостинге покупаем место под сайт, то есть где-то там есть сервер на котором лежит папка с нашим проектом , выходит это как наш компьютер, мы можем несколько портов открывать на нем под свои нужды, то есть по умолчанию 80 это для http запросов, а я ещё 3 порта с помощью создания сокета на php под другие подключения могу резервировать и вообще сколько угодно?
Дополнительно:
Ответы:
7 лет назад собирал себе на PHP упрощенный dns сервер
https://github.com/Muraveiko/DNS
Ожидает входящего соединения, на любой запрос ресолвит хост в ип адрес заглушки.
Запуск был оформлен как демон (служба) .
Увы, сами баш скрипты и прочее за давностью лет не сохранились.
Суть в том, что все это само стартовало при загрузке/перезагрузке сервера и можно было сделать с консоли
аналогично всем остальным службам start/stop
Во первых веб браузеры не умеют работать с обычным универсальным tcp/udp советами, им нужен определенный протокол, т.е. приложение, которое слушает сокет (socket_listen) должно работать по совместимому протоколу (сейчас это http, его расширение websocket, а для udp - webrtc).
Когда браузер подключается к сокету, слушала приложение получает событие и сокет клиента - соединение от браузера и дальше уже работает с ним (обычно такие приложения делают асинхронными, чтобы можно было одновременно обрабатывать несколько подключений, иначе клиента будет ждать, когда он освободится, или вылетают по таймауту)
Про 'ваш сервер', я встречал виртуальный хостинг, обычно точно дешёвые так делают, когда сервер сидит в локальной сети, а порты по тарифу подбрасываются nat, т.е. Только разрешенные порты так работают
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Открытие сокета на сервере является ключевым механизмом для установления соединения между клиентом и сервером по протоколу TCP/IP. Сокет представляет собой программный интерфейс, который позволяет приложениям обмениваться данными через сеть.
Для открытия сокета на сервере в языке программирования PHP, мы можем использовать функции socket_create(), socket_bind() и socket_listen(). Давайте рассмотрим пример:
// Создаем сокет $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); // Привязываем сокет к IP-адресу и порту socket_bind($socket, '127.0.0.1', 8080); // Начинаем прослушивать входящие соединения socket_listen($socket); // Принимаем входящее соединение $client = socket_accept($socket); // Читаем данные от клиента $data = socket_read($client, 1024); // Отправляем данные клиенту socket_write($client, 'Hello, client!'); // Закрываем соединение socket_close($client); socket_close($socket);
В данном примере мы создаем сокет с использованием протокола TCP/IP, привязываем его к IP-адресу и порту, начинаем прослушивать входящие соединения, принимаем соединение от клиента, читаем данные от клиента, отправляем ответное сообщение и закрываем соединение.
Важно помнить, что открытие сокета на сервере требует правильной обработки ошибок, а также безопасности, чтобы предотвратить возможные атаки. Также следует учитывать, что использование сокетов может быть ресурсоемким процессом, поэтому необходимо оптимизировать работу с ними для повышения производительности сервера.