@mkramer а, я разобрался, там еще можно было запустить центрифугу с параметром --unsecure и вообще без токена работать
поглядывайте в мой код, сделайте поиск по ключевым словам тех методов, которые интересуют, возможно найдётся пример применения.
ну вот, разобрался как из php с центрифугой работать! PHP: namespace phpcent; include '/Client.php'; $Centrifugo = new Client(); $Centrifugo->setSecret('11'); $Centrifugo->publish('test-channel', '{"text": "testCentrifugo"}'); die('ok');
прекрасно! --- Добавлено --- не прекрасно! не, не надо надо new \phpcent\Client() и готово. В чужой неймспейс не надо лезть.
еще такой вопрос возник: если пользователь закрыл вкладку или окно браузера, как автоматически для него disconnect сделать?
@igordata это очень радует, потому что на чистом php постоянно приходилось проверять и собирать "мусор"
и еще два вопроса: 1) как отправить сообщение ВСЕМ пользователям, подключенным к центрифуге, не важно, на какой канал они подписаны; 2) как отправить сообщение пользователю с определенным id, который подписан на определенный канал?
1) заведи общий канал 2) центрифуга это рассылка, это не логика. Ты должен сам знать кто у тебя к чему имеет доступ и кому рассылать. заведи общий канал, заводи по одному личному каналу на юзера, остальные - по группам.
@igordata да, в принципе, это логично. К статьи, я наконец разобрался с генерированием токена для подключения юзера к центрифуге. Очень интересно, для чего нужна эта функция: PHP: function generateChannelSign($client, $channel, $info = "") из названия вроде понятно, что она создает подпись (или токен?) канала. А как её использовать и для чего она конкретно нужна?
к закрытым каналам давать доступ. у кого такой подписи нет - тех центрифуга не подпишет на каналы, начинающиеся с решётки
@igordata вот это очень полезная вещь, а как канал сделать закрытым? поставить в начало названия решетку?
Не получается авторизоваться на сервере PHP: $client = new \phpcent\Client(); $client->setSecret("secret который в файле config.json"); $client->publish("main_feed", ["message" => 'test']); Получаю такую ошибку: Fatal error: Uncaught phpcent\TransportException: Response code: 401 cURL error: Body: in C:\OpenServer\domains\websocket\vendor\sl4mmer\phpcent\Transport.php on line 67 Кто-нибудь сталкивался с такой ошибкой? Просьба помочь. Спасибо.
В файле config.json "secret": "5d777da8-5809-41de-a4dd-f115d7d3e354", Файл конфиг генерировал так: centrifugo.exe getconfig В php пишу PHP: $client->setSecret("5d777da8-5809-41de-a4dd-f115d7d3e354"); Все равно ошибка
прости. не знаю может там другая центрифуга висит, может ты её не доприбил в первый запуск. может там вообще хз кто. попробуй новую на новом порте запусти.
Да проблема была как раз с версией v2, установил v1.8, все заработало. Пока не очень понятно с токенами и timestamp. Скажите пожалуйста, токен нужно генерировать каждый раз новый, при посещении страницы или генерировать один раз и хранить в сессии?
я не помню про токен, прости. я помню, что для доступа к приватным каналам надо подпись отсылать, которая проверяется на сервере запросом в твоё же приложение.
@nagamoto токен нужно генерировать при каждом новом подключении к центрифуге. Ибо он генерируется с timestamp. Там вроде можно даже настроить, чтобы центрифуга периодически разрывала соединение и заставляла подключаться клиента заново, с новым токеном (например, для проверки в целях безопасности и т.д) --- Добавлено --- timestamp это как раз unix-время, на серве оно участвует в генерации токена, который передается клиенту (чтоб он смог подключиться), и плюс клиент при подключении должен свой timestamp передать центрифуге, и потом это все сверяется например у меня это так работает: если клиент подключиться хочет, он отсылает запрос на сервер, там выполняются проверки, если подключение одобрено - ему выдается токен и timestamp. Это все передается автоматически на сторонний серв (уже со стороны клиента), на котором у меня центрифуга развернута, и клиент подключен. Потом он уже подписывается на необходимые каналы. А если подключение запрещено, ему выдается null и, соответственно, подключиться он не может
Т.е допустим у меня открыты несколько вкладок, значит на каждой вкладке соединение с разными токенами? Скажите пожалуйста есть ли возможность обработать get запросы к центрифуге? Допустим запрос такого вида ws://example.com:8000/connection/websocket/?param1=asdasdasdad¶m2=asd32wqasfas
@nagamoto совершенно верно! Для каждого нового подключения нужен новый токен, независимо от того, разные пользователи подключаются или один два раза. В центрифуге можно настроить лимит на подключения и каналы - я, допустим, ставлю лимит в 1 подключение на 1 пользователя, чтобы не плодить много одинаковых подключений. А вот насчет запросов ws:// я подсказать Вам, к сожалению, не могу - я использую центрифугу для других целей и только для прослушки каналов. Насколько помню, в центрифуге можно включить отслеживание сообщений, публикуемых в каналы клиентами, но как это использовать на практике - не знаю.