В этой статье мы разберём не большую библиотеку для работы с WebSocket на языке программирования PHP, называется она Ratchet, но здесь не будет подробного её разбора, а скорее быстрый старт.
Также можете посмотреть статью «PHP библиотека Unirest», в ней как понятно из названия вы поймёте как работать с библиотекой Unirest, для отправки REST запросов.
Как установить PHP Ratchet:
Как любую библиотеку, эту нужно сначала скачать, сделать это можно через composer, вот такой командой в терминале Linux или в командной строке Windows:
1 | composer require cboden/ratchet |
После этого, во файле где вы будите использовать эту библиотеку, подключите «autoload.php».
1 2 | <?php require '/vendor/autoload.php'; |
Теперь вы спокойно можете использовать эту библиотеку.
Основы работы с PHP Ratchet:
Теперь перейдём к основе работы с этой библиотекой, для наглядности сделаем не большой класс «Chat», но тут не будет показ как сделать весь чат, об этом в другой статье, а в этой только основы.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | // Назначаем пространство имён namespace MyApp; // Подключаем класс MessageComponentInterfac use Ratchet\MessageComponentInterface; // Подключаем класс ConnectionInterface use Ratchet\ConnectionInterface; // Создаём класс чат class Chat implements MessageComponentInterface { protected $clients; // Свойство для хранения клиентов // Конструктор класса public function __construct() { $this->clients = new \SplObjectStorage; } // Метод при подключение public function onOpen(ConnectionInterface $conn) { // Новое подключения $this->clients->attach($conn); } // Метод получения сообщения public function onMessage(ConnectionInterface $from, $msg) { // Проходим циклам по массиву подключённых пользователей foreach ($this->clients as $client) { // Отправляем сообщение $client->send($msg); } } // Метод при закрывания подключения public function onClose(ConnectionInterface $conn) { } // Метод для ошибки public function onError(ConnectionInterface $conn, \Exception $e) { } } |
Здесь мы делаем класс, который унаследовали у MessageComponentInterface
, внутри него пишем три метода:
- onOpen(ConnectionInterface $conn) — Метод для подключения клиента;
- onMessage(ConnectionInterface $from, $msg) — Метод для получения сообщения от клиента;
- onClose(ConnectionInterface $conn) — Метод закрывания подключения клиенту;
- onError(ConnectionInterface $conn, \Exception $e) — Метод для ошибки;
Тут стоит заметить, что каждый метод имеет первым параметром ConnectionInterface $conn
, если кратко говоря, то это интерфейс для создания подключения.
Также у нас есть свойство $clients
, которое будет хранить подключённых пользователей, в конструкторе мы как раз это назначаем, в onOpen()
мы добавляем нового клиента в это свойство.
В onMessage()
проходимся по массиву с клиентами, и отправляем каждому пользователю полученное сообщение, делаем это с помощью метода send()
, в котором в качестве параметра используется сообщение.
В остальном тут в целом не чего сложного нет, теперь переходим во файл, где будем объявлять класс «Chat», вот что в нём пишем.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | // Подключаем класс IoServer use Ratchet\Server\IoServer; // Подключаем наш класс Chat use MyApp\Chat; // Подключаем файл с библиотеками require '/vendor/autoload.php'; // Создаём сервер $server = IoServer::factory( new Chat(), 8080 ); // Запускаем сервер $server->run(); |
Здесь в начале нет не чего интересного, но потом используя метод factory()
, класса IoServer, мы создаём сервер WebSocket
, в первом параметре у нас объявляется наш класс, он используется для обработки WS запросов, а второй, это номер порта для обработки данных.
Последние это запуск WS сервера, на этом основы работы с библиотекой Ratchet закончились.
Вывод:
В этой статье вы прочитали основы работу с PHP библиотекой Ratchet, которая сделана для реализации WebSocket на этом языке программирования, также если она вас заинтересовала, то почитайте официальную документацию.
Если вам что-то не понятно, то рекомендую почитать наш учебник ООП на PHP.