Я пробую установить сервер https://github.com/InitPHP/Socket Использую ОпенСервер. Выполнено. - скачал архив; - разместил файлы в папке c:\openserver\domains\SocketInitPHPGithub\; - из composer.json удалил `"name": "initphp/socket",` т.к. это на следующий шагах выдавало ошибку, то удалил это согласно рекомендаций на каком-то форуме. Теперь у меня папки dsглядят как на картинке. Вопрос. 1. Как этим пользоваться? Что добавить? 2. Как запустить сервер? 3. Как запустить клиент? Я попробовал простой пример из статьи. Там файл сервер и клиент лежат в одной папке домена. Всё работает.... А как работать с таким сервером не могу разобраться.
Последовательность действий выглядит полным бредом. И эта либа низкоуровневая довольно, если нужны веб-сокеты, взять что-то конкретно поддерживающее их, Swoole или React PHP. Только мне кажется, что вы ещё ой как не готовы сокеты пилить.... Статью в студию, кстати. Сокет-серверы, если что, являются демонами, и запускаются из командной строки, а не как традиционные пых скрипты через сторонний веб-сервер
Статья классная. В 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: <?php require_once "vendor/autoload.php"; use \InitPHP\Socket\Socket; use \InitPHP\Socket\Interfaces\SocketServerInterface; $server = Socket::server(Socket::TCP, '127.0.0.1', 8080); $server->connection(); $server->live(function (SocketServerInterface $socket) { switch ($socket->read()) { case 'exit' : $socket->write('Goodbye!'); return; case 'write' : $socket->write('Run write command.'); break; case 'read' : $socket->write('Run read command.'); break; default: return; } }); ?> example-client.php PHP: <?php require_once "vendor/autoload.php"; use \InitPHP\Socket\Socket; $client = Socket::client(Socket::TCP, '127.0.0.1', 8080); /* $client->option('verify_peer', false) ->option('verify_peer_name', false); /**/ $client->connection(); $client->write('write'); echo $client->read(); ?> Протоколы заменил на TCP, порты разумеется одинаковые 8080 Путь к каталогу ../vendor/ заменил vendor (думаю понятно) Далее как в доке инсталлировал (InitPHP Socket Manager) composer require initphp/socket Далее запускаем серверный скрипт который будет ожидать подключения php example-server.php Следом (В новом терминале клиентский) php example-client.php Далее сервер читает PHP: switch ($socket->read()) { ... case 'write' : $socket->write('Run write command.'); Клиент при старте отсылает PHP: ... $client->write('write'); И получает от сервера на своей консоли Код (Text): Run write command.
Спасибо за подробное описание.. Уточните ещё детальней следующие вопросы. 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 нажать ввод?
https://getcomposer.org/ - идём сюда, и читаем до понимания, что такое composer. Кратко - основной современный механизм подключать пакеты к приложению - это менеджер пакетов. Есть во всех современных языках, php не исключение Вообще по барабану, где размещать, поскольку в сервере не нуждается не, ещё нужно сказать, что через пых выполнять. https://www.php.net/manual/ru/features.commandline.php - читаем, до понимания
Опишу свои действия. С 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: require_once "vendor/autoload.php"; . В примере автора PHP: 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
@iceblood Кажись разобрался.... Вопросы. 1. Как сделать чтобы при каждом обращении клиента был отклик от сервера? Сейчас - я ввожу на клиенте: php example-client.php - получаю: Run write command--Client. - я повторно ввожу на клиенте: php example-client.php - результат: ничего не происходит... Я думал я ввожу какую-то команду на клиенте и сервер реагирует... Как это сделать?
https://www.google.com/search?q=php...gEEMTEuMZgBAKABAbABAMgBCsABAQ&sclient=gws-wiz Примерно так PHP: $my_text=readline("my_text="); $client->write($my_text); Но сервер ожидает только то что у него в операторе switch В общем далее уже идет твоя научно-исследовательская работа. Модифицируй сервер, клиент как тебе хочется, посмотри как в пыхе работать с консольными скриптами, и для использования подключенной библиотеки изучи как работают приложухи клиент сервер. На youtube посмотри не только пых но и питон, для теории сокетов объяснения общие. Инфы по этой теме не мало.
Напокойхрен? Вы исходный код смотрели? Эта библиотека вообще ничего не делает, там штатный вызов штатных функций. Какой-то чурка написал курсовую. Пользуйтесь оригиналом, там нет ничего сложного.