Как работает открытие сокета на сервере?

Здравствуйте, помогите мне разобраться с сокетами на 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, т.е. Только разрешенные порты так работают

 

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

 

    • Как работает открытие сокета на сервере?Есть ответ
    • 07.04.2024
    Ответить

    Открытие сокета на сервере является ключевым механизмом для установления соединения между клиентом и сервером по протоколу 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-адресу и порту, начинаем прослушивать входящие соединения, принимаем соединение от клиента, читаем данные от клиента, отправляем ответное сообщение и закрываем соединение.

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

Оставить комментарий