Проблемы с REST при подключении через room api

Discussion in 'Web Call Server 5' started by Aleksandr, May 12, 2017.

  1. Aleksandr

    Aleksandr New Member

    Добрый день, перед нами стоит задача записи сообщений чата в базу данных при работе через room api.
    Что мы сделали: Создали по образцу приложение в WCS с адресом нашего вебсервера, прописали в это приложение все rest методы, создали на стороне вебсервера контроллер, который возвращает при запросе от WCS rest connect полученные данные плюс restClientConfig и код 200, изменили AppKey в параметре ROOM_REST_APP flashphoner.js на тот, который описали при создании приложения в WCS.
    В результате пользователь перестал добавляться в room и работа в комнате стала невозможной. Если изменяем ключ в flashphoner.js на тот, что был прежде - "roomApp", то работать с комнатой можно, но мы теряем возможность следить за процессами на стороне вебсервера. Подскажите, как правильно организовать взаимодействие WCS с нашим вебсервером при работе через room api.
  2. Max

    Max Administrator Staff Member

    Здесь два варианта

    Вариант 1
    Не использовать Room API
    Room API построено на вызовах
    На стороне клиента Web SDK
    Flashphoner.createSession()
    session.createStream().play()
    session.createStream().publish()
    session.createStream().sendData()
    На стороне REST Methods
    /connect
    /playStream
    /publishStream
    /OnDataEvent
    На стороне REST API
    /data/send

    Т.е. вам нужно реализовать контроллеры для 4 методов.
    В этом случае вы сможете полностью контроллировать ваши "комнаты".

    Вариант 2
    Реализовать ваше приложение так, чтобы оно было размещено "перед" нашим стандартным REST-приложением http://localhost:9091/RoomApp
    Т.е. должно работать так.
    Browser - [Websocket] - WCS - [REST/HTTP] - YourApp - [REST/HTTP] - RoomApp
    Т.е. ваше приложение все запросы делегирует нашему RoomApp: http://localhost:9091/RoomApp
    И полученные от RoomApp ответы делегирует WCS серверу.
    В этом случае вы легко можете перехватывать / записывать сообщения и сохранить при этом работу комнат.
  3. Aleksandr

    Aleksandr New Member

    Интересен второй вариант. Только не совсем понятно, как можно разместить наше приложение "перед" RoomApp. Если размещать физически, то следовательно нужно удалять приложения, предшествующие RoomApp, что может повлечь за собой непредсказуемые последствия. Если размещать логически, то не совсем понятна организация этого процесса: если я правильно понял, то вы рекомендуете вызывать rest api дважды, один раз с именем ключа нашего приложения, а затем вызвать второй раз, но уже с именем RoomApp? Или я что-то не так понял?
  4. Max

    Max Administrator Staff Member

    Нет, не так. Вот картинка.
    Ваше приложение принимает запрос от WCS и перенаправляет этот запрос на RoomApp. Далее получает от RoomApp ответ и отправляет на WCS.
    В этом случае, оно сможет перехватывать Request / Response и записывать сообщения или вводить какие-то кастомные аутентификации, например запретить коннект, если переданный токен не подошел.
    middle-app.jpg
  5. Aleksandr

    Aleksandr New Member

    В целом схема прозрачна, за исключением механизма работы с адресами: наш вебсервер имеет конкретное доменное имя https://sitename.com, WCS расположен на другом сервере с адресом https://stream.sitename.com, а приложению RoomApp соответствует адрес http://localhost:9091/RoomApp (или https://localhost:8888/RoomApp для защищенного соединения) - вопрос куда и как должно отсылать запрос наше приложение на вебсервере, чтобы схема заработала правильно?
  6. Max

    Max Administrator Staff Member

  7. Aleksandr

    Aleksandr New Member

    Спасибо. Будем пробовать
  8. Aleksandr

    Aleksandr New Member

    При обращении от нашего вебсервера к адресу http://stream.sitename.com:9091/RoomApp с параметрами в POST и Content-Type: application/json получаем ответ "метод не поддерживается":
    Ответ от WCS->Requests_Response::__set_state(array(
    'body' => '{"timestamp":1494662917120,"status":405,"error":"Method Not Allowed","exception":"org.springframework.web.HttpRequestMethodNotSupportedException","message":"Request method \'POST\' not supported","path":"/RoomApp"}',
    'raw' => 'HTTP/1.1 405 Method Not Allowed
    Server: Apache-Coyote/1.1
    Allow: HEAD, GET
    Content-Type: application/json;charset=UTF-8
    Transfer-Encoding: chunked
    Date: Sat, 13 May 2017 08:08:37 GMT
    Connection: close

    Что мы делаем не так?
  9. Max

    Max Administrator Staff Member

    Такого адреса действительно нет:
    Code:
    http://stream.sitename.com:9091/RoomApp
    Есть адреса:
    Code:
    http://stream.sitename.com:9091/RoomApp/connect
    http://stream.sitename.com:9091/RoomApp/ConnectionStatusEvent
    http://stream.sitename.com:9091/RoomApp/playStream
    и.т.д.
    Если будете высылать запросы на них, все должно заработать.

    Вы можете также снять полный дамп теста примера https://wcs5-eu.flashphoner.com/demo2/video-chat, который построен на Room API.
    Code:
     tcpdump port 9091 -i lo -w log.pcap
    В pcap файле видно как и какие параметры передаются. Пример pcap-файла в аттаче (можно открыть Wireshark).

    pcap-img.jpg

    Attached Files:

Share This Page