За последние 24 часа нас посетили 69242 программиста и 3580 роботов. Сейчас ищут 2760 программистов ...

Centrifugo для php

Тема в разделе "PHP для новичков", создана пользователем aprofen, 8 фев 2018.

  1. aprofen

    aprofen Активный пользователь

    С нами с:
    24 янв 2018
    Сообщения:
    71
    Симпатии:
    5
    @mkramer а, я разобрался, там еще можно было запустить центрифугу с параметром --unsecure и вообще без токена работать
     
  2. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.333
    Симпатии:
    1.753
    поглядывайте в мой код, сделайте поиск по ключевым словам тех методов, которые интересуют, возможно найдётся пример применения.
     
    aprofen нравится это.
  3. aprofen

    aprofen Активный пользователь

    С нами с:
    24 янв 2018
    Сообщения:
    71
    Симпатии:
    5
    @igordata да, спасибо, Ваш код тоже очень помогает мне
     
  4. aprofen

    aprofen Активный пользователь

    С нами с:
    24 янв 2018
    Сообщения:
    71
    Симпатии:
    5
    ну вот, разобрался как из php с центрифугой работать!

    PHP:
    1. namespace phpcent;
    2.  
    3. include '/Client.php';
    4.  
    5. $Centrifugo = new Client();
    6.  
    7. $Centrifugo->setSecret('11');
    8.  
    9. $Centrifugo->publish('test-channel', '{"text": "testCentrifugo"}');
    10.  
    11. die('ok');
     
  5. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.333
    Симпатии:
    1.753
    прекрасно!
    --- Добавлено ---
    не прекрасно!

    не, не надо

    надо new \phpcent\Client() и готово. В чужой неймспейс не надо лезть.
     
  6. aprofen

    aprofen Активный пользователь

    С нами с:
    24 янв 2018
    Сообщения:
    71
    Симпатии:
    5
    @igordata да это я так, для теста, уже убрал:)
     
  7. aprofen

    aprofen Активный пользователь

    С нами с:
    24 янв 2018
    Сообщения:
    71
    Симпатии:
    5
    еще такой вопрос возник: если пользователь закрыл вкладку или окно браузера, как автоматически для него disconnect сделать?
     
  8. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.333
    Симпатии:
    1.753
    тебе не надо ничего закрывать
    центрифуга сама всё делает
     
  9. aprofen

    aprofen Активный пользователь

    С нами с:
    24 янв 2018
    Сообщения:
    71
    Симпатии:
    5
    @igordata это очень радует, потому что на чистом php постоянно приходилось проверять и собирать "мусор"
     
  10. aprofen

    aprofen Активный пользователь

    С нами с:
    24 янв 2018
    Сообщения:
    71
    Симпатии:
    5
    и еще два вопроса:

    1) как отправить сообщение ВСЕМ пользователям, подключенным к центрифуге, не важно, на какой канал они подписаны;
    2) как отправить сообщение пользователю с определенным id, который подписан на определенный канал?
     
  11. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.333
    Симпатии:
    1.753
    1) заведи общий канал
    2) центрифуга это рассылка, это не логика. Ты должен сам знать кто у тебя к чему имеет доступ и кому рассылать.

    заведи общий канал, заводи по одному личному каналу на юзера, остальные - по группам.
     
  12. aprofen

    aprofen Активный пользователь

    С нами с:
    24 янв 2018
    Сообщения:
    71
    Симпатии:
    5
    @igordata да, в принципе, это логично. К статьи, я наконец разобрался с генерированием токена для подключения юзера к центрифуге.

    Очень интересно, для чего нужна эта функция:
    PHP:
    1. function generateChannelSign($client, $channel, $info = "")
    из названия вроде понятно, что она создает подпись (или токен?) канала. А как её использовать и для чего она конкретно нужна?
     
  13. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.333
    Симпатии:
    1.753
    к закрытым каналам давать доступ. у кого такой подписи нет - тех центрифуга не подпишет на каналы, начинающиеся с решётки
     
  14. aprofen

    aprofen Активный пользователь

    С нами с:
    24 янв 2018
    Сообщения:
    71
    Симпатии:
    5
    @igordata вот это очень полезная вещь, а как канал сделать закрытым? поставить в начало названия решетку?
     
  15. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.496
    Симпатии:
    1.725
    Вот же, всё написано: https://fzambia.gitbooks.io/centrifugal/content/server/channels.html
     
  16. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.333
    Симпатии:
    1.753
    да
    --- Добавлено ---
    а, эта, $ вот это правильные каналы, с # у меня не заладилось, они неудобные
     
  17. nagamoto

    nagamoto Новичок

    С нами с:
    31 июл 2018
    Сообщения:
    4
    Симпатии:
    0
    Не получается авторизоваться на сервере
    PHP:
    1. $client = new \phpcent\Client();
    2. $client->setSecret("secret который в файле config.json");
    3. $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

    Кто-нибудь сталкивался с такой ошибкой? Просьба помочь. Спасибо.
     
    #42 nagamoto, 31 июл 2018
    Последнее редактирование: 31 июл 2018
  18. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.333
    Симпатии:
    1.753
    401 это Unauthorized
    видимо секрет неправильный. проверь.
     
  19. nagamoto

    nagamoto Новичок

    С нами с:
    31 июл 2018
    Сообщения:
    4
    Симпатии:
    0
    В файле config.json
    "secret": "5d777da8-5809-41de-a4dd-f115d7d3e354",
    Файл конфиг генерировал так: centrifugo.exe getconfig

    В php пишу
    PHP:
    1. $client->setSecret("5d777da8-5809-41de-a4dd-f115d7d3e354");
    Все равно ошибка
     
    #44 nagamoto, 31 июл 2018
    Последнее редактирование: 31 июл 2018
  20. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.333
    Симпатии:
    1.753
    прости. не знаю
    может там другая центрифуга висит, может ты её не доприбил в первый запуск. может там вообще хз кто. попробуй новую на новом порте запусти.
     
    nagamoto нравится это.
  21. nagamoto

    nagamoto Новичок

    С нами с:
    31 июл 2018
    Сообщения:
    4
    Симпатии:
    0
    Да проблема была как раз с версией v2, установил v1.8, все заработало. Пока не очень понятно с токенами и timestamp. Скажите пожалуйста, токен нужно генерировать каждый раз новый, при посещении страницы или генерировать один раз и хранить в сессии?
     
  22. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.333
    Симпатии:
    1.753
    я не помню про токен, прости.
    я помню, что для доступа к приватным каналам надо подпись отсылать, которая проверяется на сервере запросом в твоё же приложение.
     
  23. aprofen

    aprofen Активный пользователь

    С нами с:
    24 янв 2018
    Сообщения:
    71
    Симпатии:
    5
    @nagamoto
    токен нужно генерировать при каждом новом подключении к центрифуге. Ибо он генерируется с timestamp. Там вроде можно даже настроить, чтобы центрифуга периодически разрывала соединение и заставляла подключаться клиента заново, с новым токеном (например, для проверки в целях безопасности и т.д)
    --- Добавлено ---
    timestamp это как раз unix-время, на серве оно участвует в генерации токена, который передается клиенту (чтоб он смог подключиться), и плюс клиент при подключении должен свой timestamp передать центрифуге, и потом это все сверяется

    например у меня это так работает: если клиент подключиться хочет, он отсылает запрос на сервер, там выполняются проверки, если подключение одобрено - ему выдается токен и timestamp. Это все передается автоматически на сторонний серв (уже со стороны клиента), на котором у меня центрифуга развернута, и клиент подключен. Потом он уже подписывается на необходимые каналы. А если подключение запрещено, ему выдается null и, соответственно, подключиться он не может
     
    #48 aprofen, 31 июл 2018
    Последнее редактирование: 31 июл 2018
    nagamoto нравится это.
  24. nagamoto

    nagamoto Новичок

    С нами с:
    31 июл 2018
    Сообщения:
    4
    Симпатии:
    0
    Т.е допустим у меня открыты несколько вкладок, значит на каждой вкладке соединение с разными токенами? Скажите пожалуйста есть ли возможность обработать get запросы к центрифуге?
    Допустим запрос такого вида ws://example.com:8000/connection/websocket/?param1=asdasdasdad&param2=asd32wqasfas
     
  25. aprofen

    aprofen Активный пользователь

    С нами с:
    24 янв 2018
    Сообщения:
    71
    Симпатии:
    5
    @nagamoto
    совершенно верно! Для каждого нового подключения нужен новый токен, независимо от того, разные пользователи подключаются или один два раза.
    В центрифуге можно настроить лимит на подключения и каналы - я, допустим, ставлю лимит в 1 подключение на 1 пользователя, чтобы не плодить много одинаковых подключений.

    А вот насчет запросов ws:// я подсказать Вам, к сожалению, не могу - я использую центрифугу для других целей и только для прослушки каналов.
    Насколько помню, в центрифуге можно включить отслеживание сообщений, публикуемых в каналы клиентами, но как это использовать на практике - не знаю.
     
    nagamoto нравится это.