За последние 24 часа нас посетили 22890 программистов и 1261 робот. Сейчас ищут 719 программистов ...

Как настроить сокет сервер-клиент

Тема в разделе "PHP для новичков", создана пользователем inkom, 27 май 2022.

Метки:
  1. inkom

    inkom Активный пользователь

    С нами с:
    2 апр 2018
    Сообщения:
    28
    Симпатии:
    0
    Я пробую установить сервер https://github.com/InitPHP/Socket
    Использую ОпенСервер.
    Выполнено.
    - скачал архив;
    - разместил файлы в папке c:\openserver\domains\SocketInitPHPGithub\;
    - из composer.json удалил `"name": "initphp/socket",`
    т.к. это на следующий шагах выдавало ошибку, то удалил это согласно рекомендаций на каком-то форуме.

    Теперь у меня папки dsглядят как на картинке.

    Вопрос.
    1. Как этим пользоваться? Что добавить?
    2. Как запустить сервер?
    3. Как запустить клиент?

    Я попробовал простой пример из статьи.
    Там файл сервер и клиент лежат в одной папке домена.
    Всё работает....
    А как работать с таким сервером не могу разобраться.
     

    Вложения:

  2. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.555
    Симпатии:
    1.754
    Последовательность действий выглядит полным бредом. И эта либа низкоуровневая довольно, если нужны веб-сокеты, взять что-то конкретно поддерживающее их, Swoole или React PHP. Только мне кажется, что вы ещё ой как не готовы сокеты пилить....

    Статью в студию, кстати.

    Сокет-серверы, если что, являются демонами, и запускаются из командной строки, а не как традиционные пых скрипты через сторонний веб-сервер
     
    inkom нравится это.
  3. inkom

    inkom Активный пользователь

    С нами с:
    2 апр 2018
    Сообщения:
    28
    Симпатии:
    0
  4. iceblood

    iceblood Активный пользователь

    С нами с:
    20 фев 2020
    Сообщения:
    83
    Симпатии:
    12
    Статья классная. В github пишет автор (https://github.com/InitPHP/Socket/blob/main/README.md) что должно быть подключено расширение PHP Sockets Extension . Из консоли можно проверить подключенные модули зайдя в папку с файлом php.exe и ввести php -m .
    Если в списке нет sockets . то в том же каталоге может быть файл настройки самого php (php.ini) В нем нужно раскомментировать строку extension=sockets

    Я взял примеры автора (немного изменив) положил их в пустой каталог
    example-server.php
    PHP:
    1. <?php
    2. require_once "vendor/autoload.php";
    3. use \InitPHP\Socket\Socket;
    4. use \InitPHP\Socket\Interfaces\SocketServerInterface;
    5.  
    6. $server = Socket::server(Socket::TCP, '127.0.0.1', 8080);
    7. $server->connection();
    8.  
    9. $server->live(function (SocketServerInterface $socket) {
    10.     switch ($socket->read()) {
    11.         case 'exit' :
    12.             $socket->write('Goodbye!');
    13.             return;
    14.         case 'write' :
    15.             $socket->write('Run write command.');
    16.         break;
    17.         case 'read' :
    18.             $socket->write('Run read command.');
    19.         break;
    20.         default: return;
    21.     }
    22. });
    23. ?>
    example-client.php
    PHP:
    1. <?php
    2. require_once "vendor/autoload.php";
    3. use \InitPHP\Socket\Socket;
    4.  
    5. $client = Socket::client(Socket::TCP, '127.0.0.1', 8080);
    6. /*
    7. $client->option('verify_peer', false)
    8.     ->option('verify_peer_name', false);
    9.     /**/
    10.  
    11. $client->connection();
    12.  
    13. $client->write('write');
    14.  
    15. echo $client->read();
    16. ?>
    Протоколы заменил на TCP, порты разумеется одинаковые 8080
    Путь к каталогу ../vendor/ заменил vendor (думаю понятно)

    Далее как в доке инсталлировал (InitPHP Socket Manager)

    composer require initphp/socket

    Далее запускаем серверный скрипт который будет ожидать подключения php example-server.php
    Следом (В новом терминале клиентский) php example-client.php

    Далее сервер читает

    PHP:
    1. switch ($socket->read()) {
    2. ...
    3.         case 'write' :
    4.             $socket->write('Run write command.');
    Клиент при старте отсылает
    PHP:
    1. ...
    2. $client->write('write');
    И получает от сервера на своей консоли
    Код (Text):
    1. Run write command.
     
    inkom нравится это.
  5. inkom

    inkom Активный пользователь

    С нами с:
    2 апр 2018
    Сообщения:
    28
    Симпатии:
    0
    Спасибо за подробное описание..
    Уточните ещё детальней следующие вопросы.


    1. Нужно(можно) размещать в каталоге, который никак не связан с OpenServer?
    Пример: e:\Projects\PHPServers\InitPHPGithub\s01\

    2. Что делать с файлами проекта?
    https://github.com/InitPHP/Socket
    Где их размещать?
    Пришлите картинку или пути где будет показано какие файлы вы используете.

    Пример.
    Я в ручном режиме скачал проект.
    У меня имеются файлы.
    Где их размещать?
    Папка проект\:
    - src\
    -.gitignore
    - composer.json
    - LICENSE
    - README.md

    Папка проект\src\:
    - Client\
    - Common\
    - Exception\
    - Interfaces\
    - Server\
    - Socket.php

    Что и куда копировать?

    3. Как инсталировать InitPHP Socket Manager?
    Открыть консоль OpenServer?
    Куда перейти?
    Вводить: composer require initphp/socket?

    4. Как запустить серверный скрипт?
    Открыть консоль OpenServer?
    Перейти в папку где лежит example-server.php?
    Ввести example-server.php нажать ввод?
     

    Вложения:

  6. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.555
    Симпатии:
    1.754
    https://getcomposer.org/ - идём сюда, и читаем до понимания, что такое composer. Кратко - основной современный механизм подключать пакеты к приложению - это менеджер пакетов. Есть во всех современных языках, php не исключение

    Вообще по барабану, где размещать, поскольку в сервере не нуждается

    не, ещё нужно сказать, что через пых выполнять. https://www.php.net/manual/ru/features.commandline.php - читаем, до понимания
     
  7. iceblood

    iceblood Активный пользователь

    С нами с:
    20 фев 2020
    Сообщения:
    83
    Симпатии:
    12
    Опишу свои действия.
    С https://windows.php.net/download/ скачал PHP 7.4 (7.4.29) https://windows.php.net/downloads/releases/php-7.4.29-nts-Win32-vc15-x64.zip и распаковал в c:\php, раскомментировал расширение sockets
    С сайта https://getcomposer.org/download/ скачал Composer-Setup.exe и установил.
    Создал пустой каталог в который подложил два файла клиент и сервер. В этом каталоге composer require initphp/socket.
    Композер скачал файлы проекта initphp в тот же каталог как если бы ты его распаковал из архива. Соответственно в файлах клиента и сервера теперь нужно было указать правильный путь поиска. У меня
    PHP:
    1. require_once "vendor/autoload.php";
    . В примере автора
    PHP:
    1. require_once "../vendor/autoload.php";
    . Разница в том что ../ означает перейти на уровень каталогов выше, там будет каталог vendor где взять файл autoload.php
    Сам файл autoload.php подключит все необходимые файлы из каталога vendor/initphp/... к твоему проекту, что и сделает доступными для твоего проекта нужные классы, их методы ... Немного замечу про композер, что бы не было больших пробелов. В твоем проекте может использоваться множество библиотек в каталоге vendor. Качать их руками и подключать руками (нафинг) это за тебя может утилита, почитай, погляди видосы, не пренебрегай.

    Так как ты скачал руками и разархивировал, то можешь скопировать мои файлы в корень того каталога куда разархивировал файлы example-client.php example-server.php . Не пробовал по твоему сделать, думаю должно сработать.

    Не совсем по теме но с github можно работать с помощью утилиты git https://github.com/git-for-windows/git/releases/download/v2.36.1.windows.1/Git-2.36.1-64-bit.exe
    Документация https://git-scm.com/book/ru/v2
     

    Вложения:

    • tree.txt
      Размер файла:
      2 КБ
      Просмотров:
      3
    inkom нравится это.
  8. inkom

    inkom Активный пользователь

    С нами с:
    2 апр 2018
    Сообщения:
    28
    Симпатии:
    0
    @iceblood
    Кажись разобрался....

    Вопросы.
    1.
    Как сделать чтобы при каждом обращении клиента был отклик от сервера?
    Сейчас
    - я ввожу на клиенте: php example-client.php
    - получаю: Run write command--Client.
    - я повторно ввожу на клиенте: php example-client.php
    - результат: ничего не происходит...

    Я думал я ввожу какую-то команду на клиенте и сервер реагирует...
    Как это сделать?
     

    Вложения:

  9. iceblood

    iceblood Активный пользователь

    С нами с:
    20 фев 2020
    Сообщения:
    83
    Симпатии:
    12
    https://www.google.com/search?q=php...gEEMTEuMZgBAKABAbABAMgBCsABAQ&sclient=gws-wiz

    Примерно так
    PHP:
    1. $my_text=readline("my_text=");
    2. $client->write($my_text);
    Но сервер ожидает только то что у него в операторе switch

    В общем далее уже идет твоя научно-исследовательская работа.
    Модифицируй сервер, клиент как тебе хочется, посмотри как в пыхе работать с консольными скриптами, и для использования подключенной библиотеки изучи как работают приложухи клиент сервер. На youtube посмотри не только пых но и питон, для теории сокетов объяснения общие.
    Инфы по этой теме не мало.
     
  10. Satger

    Satger Активный пользователь

    С нами с:
    19 апр 2020
    Сообщения:
    72
    Симпатии:
    1
    Напокойхрен? Вы исходный код смотрели? Эта библиотека вообще ничего не делает, там штатный вызов штатных функций. Какой-то чурка написал курсовую.
    Пользуйтесь оригиналом, там нет ничего сложного.