Уважаемые разработчики Blynk, расскажите пожалуйста, как у вас реализованы запросы к BlynkServer из приложения под iOS?
Пробовал в Swift написать по аналогии с вашими примерами из Blynk.API. Все работает, но …
Сделал периодическое обновление данных через NSTimer с интервалом в 1 секунду, но мне нужно обновлять данные значительно чаще, 10 раз в секунду и более. При этом получается слишком много почти одновременных HTTP запросов, большая нагрузка на канал связи.
Расскажите, если это не секрет, как у вас реализовано обновление состояний в приложении под iOS
Если возможно с примером кода)
Спасибо!
Посмотрел описание вашего протокола, сам протокол более-менее понятен.
Не смог разобраться как происходит аутентификация при подключении к сокету с использованием токена.
Где можно про это почитать?
Dmitriy, спасибо за ссылку на клиент, смотрю исходники, пробую использовать под свою задачу
Появилось еще несколько вопросов, если я правильно все понял, подтвердите
удаленно приложение общается с сервером через 443 порт, верно?
обмен данными идет в binary, верно? (хотя еще вчера где-то прочитал, что в plain text, но не могу найти где я это видел, может я ошибся)
Заголовок пакета сделал по аналогии с этим
struct BlynkHeader
{
uint8_t type;
uint16_t msg_id;
uint16_t length;
}
Согласно вашему описанию я формирую заголовок на аутентификацию по токену:
первый байт - команда (2 - login)
два байта - message_id (не знаю, что это?, ставлю 1)
четыре байта - размер пакета (32)
отправляемый пакет данных (в данном случае токен)
Отправляю в сокет: 2 1 32 token
соединение не происходит
Каким образом формируется msg_id и что означает?
Напишите пожалуйста хоть на java хоть на чем угодно пример для соединения и отправки команды, допустим vw 1 1
Да. Первые 5 байт (для железа 1 + 2 + 2) и первые 7 байт (для приложения 1 + 2 + 4) - бинари. Остальное - текст.
Да, для железа. Для приложения это uint32_t length;.
У вас в структуре 16, откуда 32?
У железа и апки немного различаются протоколы. У приложения длина это 4 байта, а не 2 как ужелеза. Так же, если вы логинитесь как железо по токену, то Вы должны конектистя на порт 80 (или 8080 для локального сервера).
Любое последовательное число. Просто айди сообщения.
Логин как приложение подразумевает имейл и хеш пароля.
Нет. Тут есть приципиальное отличие. У железа своя цепочка обработчиков, у приложения - другая. Если вы железо, вы логинитесь через токен и на порт 80. Если вы приложение через пароль и имейл и на порт 443.
Тогда опишу свою задачу. Мне необходимо из приложения на Swift (под iOS) постоянно отслеживать состояние одного пина (лучше виртуального) с периодичностью 10-20 запросов в секунду.
Т.е. в принципе я так понял мне не требуется логиниться как приложение.
Достаточно залогиниться как железо по 80 порту используя только токен.
Т.е. я открываю сокет по 80 порту, отправляю в бинари:
первый байт - 29 (HARDWARE_LOGIN)
затем два байта - любое целое число (msg_id)
затем два байта размер строки - 32 (размер body)
потом в body виде обычного текста отправляю токен
После этого могу начинать обмен следующими пакетами?
Так получится?