Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Шлюз для работы с ВК / 22 сообщений из 22, страница 1 из 1
27.11.2018, 16:58
    #39739261
maloletov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Шлюз для работы с ВК
Народ, прошу совета.
Есть следующая задача: Есть страница в ВК компании, пользователи ВК могту писать сообщения и операторы их обрабатывают. пока они отвечают прямо в браузере. Нужно написать приложение. где будут работать операторы, чтобы можно было организовать учет, контроль и т.п.
Хочу все это сделать через TCP на Indy. Клиенты делают запрос на сервер (например отправить сообщение пользователю, просмотреть переписку), сервер его отправляет. Т.е. сервер выступает шлюзом для работы с ВК. Тут проблем нет.
Проблема возникает когда ВК становится источником события (например пользователь начал набирать текст или прислал новое сообщение в чат). Изучил API ВК и эти события я могу отследить на стороне сервера. Проблема состоит в том, чтобы информацию о событии передать клиентам.
Пока приходит в голову идея при получении информации о событии на стороне сервера перебирать клиентов и писать в сокет информацию о событии, на стороне клиента раз в секунду, например, читать соединение. Насколько этот метод жизнеспособен? Что будет если сервер запишет в сокет подряд несколько событий, что прочитает клиент? Не будет ли тормозить эта схема, если от ВК будет много событий и сервер постоянно будет писать клиентам в сокеты события (веди при этом блокируется весь список клиентов на сервере).
Может есть другие варианты? Готов ответить на вопросы, если криво изложил))
...
Рейтинг: 0 / 0
27.11.2018, 17:12
    #39739273
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Шлюз для работы с ВК
maloletovМожет есть другие варианты?

Есть: выкинуть из этой схемы твой "сервер", а всю работу с API ВК организовать прямо в
приложении.

И изучить работу с winsock чтобы не нести бред о "блокируется весь список клиентов".
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
27.11.2018, 17:18
    #39739281
maloletov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Шлюз для работы с ВК
Dimitry Sibiryakov,
автора всю работу с API ВК организовать прямо в
приложении. В ВК есть ограничение на кол-во запросов к API в секунду. Если одновременно 20 клиентов сделают по 5 запросов в течении секунды - половина отвалится + тогда сложнее отслеживать события в ВК.
авторИ изучить работу с winsock чтобы не нести бред о "блокируется весь список клиентов".
Можно пример как со стороны сервера отправить клиенту сообщение без инициации активности со стороны клиента в Indy. Например есть сервер TCP и к нему подключено 3 клиента. Как клиенту 1 отправить сообщение клиенту 3?
...
Рейтинг: 0 / 0
27.11.2018, 17:25
    #39739284
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Шлюз для работы с ВК
maloletovМожно пример как со стороны сервера отправить клиенту сообщение без инициации активности
со стороны клиента в Indy.

Функцией send(). Повторяю медленно: windows sockets , не кривые компоненты, а
натуральное API.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
27.11.2018, 17:30
    #39739288
maloletov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Шлюз для работы с ВК
Dimitry Sibiryakov,
С winsock не приходилось работать пока. Есть в наличии Indy, со своими задачами он справлялся до сих пор.
На Indy это можно сделать? или смотреть в сторону winAPI?
...
Рейтинг: 0 / 0
27.11.2018, 17:48
    #39739301
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Шлюз для работы с ВК
maloletovНа Indy это можно сделать?

Можно. Но для этого изучить работу непосредственного API над которым сделана эта кривая
обёртка таки придётся.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
27.11.2018, 18:12
    #39739326
Василий 2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Шлюз для работы с ВК
Опрашивать события чаще раза в секунду - смысла нет.
Indy блокирующий, поэтому поток будет висеть на read, пока другой конец ему чего-нибудь не запишет.
В цикле отправить событие всем клиентам - не вижу особых затруднений. Тем более если опрашивать ВК раз в секунду и ничего не посылать, если ничего не произошло. Это ж не fullHD видео поток с десяти камер.
...
Рейтинг: 0 / 0
27.11.2018, 19:14
    #39739356
s62
s62
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Шлюз для работы с ВК
Недавно было тут несколько тем про работу с ВК, вот можно посмотреть в списке тем автора они есть:
https://www.sql.ru/forum/actualsearch.aspx?a=Tech N9ne&ma=0
Я тогда смотрел, насколько помню, API ВК написано поверх HTTP(S). Так что можно взять любой компонент, который может работать с HTTPS.
...
Рейтинг: 0 / 0
27.11.2018, 19:28
    #39739361
asutp2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Шлюз для работы с ВК
Василий 2Indy блокирующий, поэтому поток будет висеть на read, пока другой конец ему чего-нибудь не запишетнеобязательно. можно установить на ожидание данных timeout = 0, перед чтением проверять размер буфера входящих данных и тогда read не подвешивает поток.
...
Рейтинг: 0 / 0
27.11.2018, 22:04
    #39739419
X-Cite
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Шлюз для работы с ВК
Из стандартного TRESTClient, TRESTRequest и TRESTResponse чем не подойдут?
...
Рейтинг: 0 / 0
27.11.2018, 22:05
    #39739421
X-Cite
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Шлюз для работы с ВК
Есть еще поделки на github, может помогут
https://github.com/vladon/vkapi
...
Рейтинг: 0 / 0
27.11.2018, 22:30
    #39739432
maloletov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Шлюз для работы с ВК
Спасибо за советы. Я имел дело по только с Инди, остальные компоненты посмотрю. С самим АПИ ВК проблем нет, да он сделан поверх HTTPS.
По сути основная проблема для меня вот в чем. Есть процесс, который живёт в отдельном потоке и в нем перманентно рождаются некоторые данные. И есть клиенты, которым эти данные нужно передать. Причём клиент должен получить свою часть данных или не получить ничего, если данных для него нет.
Как грамотно организовать этот процесс?
Пока на ум приходит сервер tcp на Инди. Один из клиентов будет отправлять на сервер данные, а сервер по факту получения порции данных будет перебирать клиентов и если найдёт нужного, то будет писать в его сокет данные. На стороне клиента читать сокет с тайм-аутом 5 мс например, если что-то прочитается - обработать, если нет, делать паузу и читать дальше.
Может есть более грамотная организация процесса?
...
Рейтинг: 0 / 0
27.11.2018, 22:37
    #39739435
X-Cite
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Шлюз для работы с ВК
maloletovСпасибо за советы. Я имел дело по только с Инди, остальные компоненты посмотрю. С самим АПИ ВК проблем нет, да он сделан поверх HTTPS.
По сути основная проблема для меня вот в чем. Есть процесс, который живёт в отдельном потоке и в нем перманентно рождаются некоторые данные. И есть клиенты, которым эти данные нужно передать. Причём клиент должен получить свою часть данных или не получить ничего, если данных для него нет.
Как грамотно организовать этот процесс?
Пока на ум приходит сервер tcp на Инди. Один из клиентов будет отправлять на сервер данные, а сервер по факту получения порции данных будет перебирать клиентов и если найдёт нужного, то будет писать в его сокет данные. На стороне клиента читать сокет с тайм-аутом 5 мс например, если что-то прочитается - обработать, если нет, делать паузу и читать дальше.
Может есть более грамотная организация процесса?
В собственной кухне можно юзать DataSnap. Обмен на чистом TCP с помощью байтов, а не объектов, уже кажется каким-то далеким и нереальным...
...
Рейтинг: 0 / 0
27.11.2018, 22:48
    #39739440
Фэйтл Эра
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Шлюз для работы с ВК
maloletov...Есть процесс, который живёт в отдельном потоке и в нем перманентно рождаются некоторые данные. И есть клиенты, которым эти данные нужно передать. Причём клиент должен получить свою часть данных или не получить ничего, если данных для него нет...
Клиенты и сервер - треды одного процесса?
...
Рейтинг: 0 / 0
27.11.2018, 22:50
    #39739443
maloletov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Шлюз для работы с ВК
Фэйтл Эра,
Нет это разные приложения на разных машинах в сети.
...
Рейтинг: 0 / 0
27.11.2018, 22:53
    #39739447
Фэйтл Эра
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Шлюз для работы с ВК
maloletovФэйтл Эра,
Нет это разные приложения на разных машинах в сети.
Сеть - локальная (ограничена предприятием)?
...
Рейтинг: 0 / 0
27.11.2018, 22:56
    #39739448
maloletov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Шлюз для работы с ВК
Фэйтл ЭраmaloletovФэйтл Эра,
Нет это разные приложения на разных машинах в сети.
Сеть - локальная (ограничена предприятием)?
Да, локалка
...
Рейтинг: 0 / 0
27.11.2018, 23:03
    #39739452
Фэйтл Эра
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Шлюз для работы с ВК
Можно реализовать подписку .
Сервер публикует все данные, которые у него появляются, а клиенты подписываются на те, которые им нужны.
Преимущества: заранее неизвестно, что там клиентам может понадобится.

Если сеть локальная - ZeroMQ: 16588333
...
Рейтинг: 0 / 0
27.11.2018, 23:18
    #39739458
maloletov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Шлюз для работы с ВК
Фэйтл ЭраМожно реализовать подписку .
Сервер публикует все данные, которые у него появляются, а клиенты подписываются на те, которые им нужны.
Преимущества: заранее неизвестно, что там клиентам может понадобится.

Если сеть локальная - ZeroMQ: 16588333
Спасибо, интересный вариант, покопаю в этом направлении
...
Рейтинг: 0 / 0
28.11.2018, 00:44
    #39739474
энди
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Шлюз для работы с ВК
https://www.clevercomponents.com/portal/kb/a111/vk-authorization-getting-the-oauth-code-in-delphi-app-using-twebbrowser.aspx

хоть и не инди но на просторах инета можно найти и сделать по аналогии на инди я думаю
...
Рейтинг: 0 / 0
28.11.2018, 14:53
    #39739828
s62
s62
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Шлюз для работы с ВК
maloletov...
По сути основная проблема для меня вот в чем. Есть процесс, который живёт в отдельном потоке и в нем перманентно рождаются некоторые данные. И есть клиенты, которым эти данные нужно передать. Причём клиент должен получить свою часть данных или не получить ничего, если данных для него нет.
Как грамотно организовать этот процесс?
Пока на ум приходит сервер tcp на Инди. Один из клиентов будет отправлять на сервер данные, а сервер по факту получения порции данных будет перебирать клиентов и если найдёт нужного, то будет писать в его сокет данные. На стороне клиента читать сокет с тайм-аутом 5 мс например, если что-то прочитается - обработать, если нет, делать паузу и читать дальше.
Может есть более грамотная организация процесса?
Как X-Cite написал, можно использовать DataSnap, если есть такая возможность (он есть не во всех версиях, в Professopnal его нет, если это для вас имеет значение). Там есть обратные вызовы с сервера.

Если для обмена клиентов и сервера использовать не Инди, а написать обмен на API, то чтение на клиенте можно организовать при помощи событий. Когда во входящий буфер сокета что-то пришло, срабатывает (взводится) событие и соответственно программа может обработать пришедшие данные.
http://www.delphikingdom.ru/asp/viewitem.asp?catalogid=1060#06
...
Рейтинг: 0 / 0
28.11.2018, 15:09
    #39739853
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Шлюз для работы с ВК
s62чтение на клиенте можно организовать при помощи событий. Когда во входящий буфер сокета
что-то пришло, срабатывает (взводится) событие и соответственно программа может обработать
пришедшие данные.

Если программа оконная, то сообщения (message) удобнее событий (event).
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Шлюз для работы с ВК / 22 сообщений из 22, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]