Страницы

Поиск по вопросам

вторник, 31 декабря 2019 г.

WebSocket с серверной частью на php

#php


Доброго времени суток, пытаюсь разобраться с вебсокетами, а именно с серверной его
частью на php. С клиентской все просто:




А вот с серверной... Перечитал кучу постов на хабре, тут, да и не только. Но никак
не могу понять, для чего нужен phpDeamon или Ratchet, и в каких случаях они нужны?
И в тени для меня осталось как их устанавливать на реальный хостинг, везде разговор
ведется о установке на локальные серверы типа denwer или openserver. Просветите пожалайста
    


Ответы

Ответ 1



Обычное построение веба основано на архитектуре "клиент-сервер". Т.е. есть клиентские машины, а есть сервера, которые ожидают запросы от клиентов, обрабатывают эти запросы и отправляют обратно клиенту. В Вашем случае клиентом выступает браузер. Он может общаться с каким-либо вебсервером (в большинстве случаем эту роль выполняет apache в связке с php) по одному из протоколов (языков обмена по сети). Как правило, это HTTP. Т.е. Вы отправляете из браузера HTTP-запрос, вебсервер его обрабатывает и отправляет обратно. Но можно обращаться и по другому протоколу (языку обмена) - websocket. Это отдельный протокол обмена, не имеющий ничего общего с HTTP. Опять же, клиентом в Вашем случае выступает браузер. Но вот незадача... нужен еще и сервер, который примет запрос, обработает его и вернет обратно по тому же протоколу. А обычный вебсервер не понимает этого "языка". Обычный вебсервер понимает только HTTP. Поэтому необходимо установить и запустить любой другой сервер (не обязательно должен быть phpDeamon), который будет принимать и обрабатывать запросы именно по протоколу websocket. Что касается хостинга, то хостинг хостингу рознь. Но если Вы возьмете VPS да еще и с Win, то, по сути, получите в свои руки компьютер, на котором можете делать все, что душе угодно (можете при желании даже и denwer и openserver поставить). Ну а как пользоваться компьютером, думается, объяснять не нужно.

Ответ 2



Ratchet, phpDaemon, Workerman и т.д. - это библиотеки, которые помогают создавать сервер (в вашем случае Websocket) в несколько десятков строк, просто реализовав предоставленный интерфейс библиотекой (onClose, onOpen, onMessage, onError) и работая с функциями, которые написаны уже до вас. После чего вы запускаете PHP-скрипт, который является демоном, и он прослушивает порт для соединения и выдает ответы клиентам по реализованному интерфейсу. Нет, конечно вы можете это написать сами и использовать вместо нескольких строчек собственную библиотеку, но у вас уйдет много времени, ведь вам нужно разбираться в тонкостях протокола, в процессе handshake, передаче заголовков, отправке сообщений, написать различные функции, обработку клиентов, потратить время на отладку... А тут все написано до вас. Что подразумевается под реальным хостингом? Если shared, то вряд-ли (из-за ограничений, но лучше уточнить у хостера, на VPS точно получится). Пример реализации сервера на Rachet, есть на github библиотеки Rachet

Ответ 3



Коллеги, разрешите посоветовать вам более удобный инструмент - wsphp.net Используя его, не нужно что-то кардинально менять подходях к программированию на PHP. Как обычно используем $_GET, $_SESSION и прочие переменные. То, что надо вернуть клиенту, возвращаем в stdout. В общем, никаких отличий с точки зрения PHP - работаем по websocket или HTTP...

Комментариев нет:

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