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

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

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

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

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

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

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

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

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

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


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