Підключення до сервера websocket з web додатки

Завдання: передавати дані в реальному часі від вашого застосування, підключеним до socket сервера користувачам. Це дозволить їм, без перезавантаження сторінки, відразу побачити ці дані.

У мене стояло завдання зробити якусь сторінку моніторингу подій, що відбуваються в додатку. На сторінці в реальному часі, в вигляді живої стрічки, з'являються дані про виникаючі події.

Використовується yii2 і Ratchet.

Для роботи нам буде потрібно встановити розширення для php zmq. Я використовую arch linux систему, і встановив пакет з aur php-zmq. Далі, c допомогою composer встановимо Ratchet, React / ZMQ (зажадає php розширення zmq):

Беремо приклад запуску сервера з документації Ratchet і створюємо controller для консольного застосування.

Далі на стороні клієнта, в поданні (на потрібній нам сторінці веб додатки), підключимо зовнішній js файл,

Далі створимо клас, який буде реалізовувати WampServerInterface. Метод onSubscribe викликається коли користувач (далі "клієнт") підключається до сервера. На метод onPushEventData навішується подія при запуску сервера. За допомогою нього ми будемо "проштовхувати" дані клієнта. В цьому класі для налагодження вашого коду підійде простий print_r (). Дані будуть виводитися в консоль.

Якщо ви створили контролер запуску сервера в папці app / commands (за замовчуванням в basic додатку yii2 'controllerNamespace' => 'app \ commands') можна його вже запустити і перевірити роботу. Якщо команди не видно при запиті php yii, то налаштуйте controllerNamespace в конфігурації або модулі.

Можна переконатися що сервер запустився за допомогою команди: sudo netstat -tulpn

А так же перевірити що це не "поклало" ваш сервер і сайт працює. ) При переходите на сторінку де відбувається підключення, в консолі не повинно бути помилки підключення до ws: //127.0.0.1: 8080.

Все майже готове. Тепер реалізовуємо магію zmq в нашому веб додатку. Будемо з'єднатися із сервером і передавати туди дані. У моєму випадку це дані виник події.

Тепер все має працювати. Сподіваюся це допоможе кому то і прискорить його роботу. Вказівка ​​помилок, теоретична інформація по темі і доопрацювання вітається.

Схожі статті