|
|
|
Шлюз для работы с ВК
|
|||
|---|---|---|---|
|
#18+
Народ, прошу совета. Есть следующая задача: Есть страница в ВК компании, пользователи ВК могту писать сообщения и операторы их обрабатывают. пока они отвечают прямо в браузере. Нужно написать приложение. где будут работать операторы, чтобы можно было организовать учет, контроль и т.п. Хочу все это сделать через TCP на Indy. Клиенты делают запрос на сервер (например отправить сообщение пользователю, просмотреть переписку), сервер его отправляет. Т.е. сервер выступает шлюзом для работы с ВК. Тут проблем нет. Проблема возникает когда ВК становится источником события (например пользователь начал набирать текст или прислал новое сообщение в чат). Изучил API ВК и эти события я могу отследить на стороне сервера. Проблема состоит в том, чтобы информацию о событии передать клиентам. Пока приходит в голову идея при получении информации о событии на стороне сервера перебирать клиентов и писать в сокет информацию о событии, на стороне клиента раз в секунду, например, читать соединение. Насколько этот метод жизнеспособен? Что будет если сервер запишет в сокет подряд несколько событий, что прочитает клиент? Не будет ли тормозить эта схема, если от ВК будет много событий и сервер постоянно будет писать клиентам в сокеты события (веди при этом блокируется весь список клиентов на сервере). Может есть другие варианты? Готов ответить на вопросы, если криво изложил)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2018, 16:58 |
|
||
|
Шлюз для работы с ВК
|
|||
|---|---|---|---|
|
#18+
maloletovМожет есть другие варианты? Есть: выкинуть из этой схемы твой "сервер", а всю работу с API ВК организовать прямо в приложении. И изучить работу с winsock чтобы не нести бред о "блокируется весь список клиентов". Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2018, 17:12 |
|
||
|
Шлюз для работы с ВК
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, автора всю работу с API ВК организовать прямо в приложении. В ВК есть ограничение на кол-во запросов к API в секунду. Если одновременно 20 клиентов сделают по 5 запросов в течении секунды - половина отвалится + тогда сложнее отслеживать события в ВК. авторИ изучить работу с winsock чтобы не нести бред о "блокируется весь список клиентов". Можно пример как со стороны сервера отправить клиенту сообщение без инициации активности со стороны клиента в Indy. Например есть сервер TCP и к нему подключено 3 клиента. Как клиенту 1 отправить сообщение клиенту 3? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2018, 17:18 |
|
||
|
Шлюз для работы с ВК
|
|||
|---|---|---|---|
|
#18+
maloletovМожно пример как со стороны сервера отправить клиенту сообщение без инициации активности со стороны клиента в Indy. Функцией send(). Повторяю медленно: windows sockets , не кривые компоненты, а натуральное API. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2018, 17:25 |
|
||
|
Шлюз для работы с ВК
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, С winsock не приходилось работать пока. Есть в наличии Indy, со своими задачами он справлялся до сих пор. На Indy это можно сделать? или смотреть в сторону winAPI? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2018, 17:30 |
|
||
|
Шлюз для работы с ВК
|
|||
|---|---|---|---|
|
#18+
maloletovНа Indy это можно сделать? Можно. Но для этого изучить работу непосредственного API над которым сделана эта кривая обёртка таки придётся. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2018, 17:48 |
|
||
|
Шлюз для работы с ВК
|
|||
|---|---|---|---|
|
#18+
Опрашивать события чаще раза в секунду - смысла нет. Indy блокирующий, поэтому поток будет висеть на read, пока другой конец ему чего-нибудь не запишет. В цикле отправить событие всем клиентам - не вижу особых затруднений. Тем более если опрашивать ВК раз в секунду и ничего не посылать, если ничего не произошло. Это ж не fullHD видео поток с десяти камер. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2018, 18:12 |
|
||
|
Шлюз для работы с ВК
|
|||
|---|---|---|---|
|
#18+
Недавно было тут несколько тем про работу с ВК, вот можно посмотреть в списке тем автора они есть: https://www.sql.ru/forum/actualsearch.aspx?a=Tech N9ne&ma=0 Я тогда смотрел, насколько помню, API ВК написано поверх HTTP(S). Так что можно взять любой компонент, который может работать с HTTPS. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2018, 19:14 |
|
||
|
Шлюз для работы с ВК
|
|||
|---|---|---|---|
|
#18+
Василий 2Indy блокирующий, поэтому поток будет висеть на read, пока другой конец ему чего-нибудь не запишетнеобязательно. можно установить на ожидание данных timeout = 0, перед чтением проверять размер буфера входящих данных и тогда read не подвешивает поток. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2018, 19:28 |
|
||
|
Шлюз для работы с ВК
|
|||
|---|---|---|---|
|
#18+
Из стандартного TRESTClient, TRESTRequest и TRESTResponse чем не подойдут? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2018, 22:04 |
|
||
|
Шлюз для работы с ВК
|
|||
|---|---|---|---|
|
#18+
Есть еще поделки на github, может помогут https://github.com/vladon/vkapi ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2018, 22:05 |
|
||
|
Шлюз для работы с ВК
|
|||
|---|---|---|---|
|
#18+
Спасибо за советы. Я имел дело по только с Инди, остальные компоненты посмотрю. С самим АПИ ВК проблем нет, да он сделан поверх HTTPS. По сути основная проблема для меня вот в чем. Есть процесс, который живёт в отдельном потоке и в нем перманентно рождаются некоторые данные. И есть клиенты, которым эти данные нужно передать. Причём клиент должен получить свою часть данных или не получить ничего, если данных для него нет. Как грамотно организовать этот процесс? Пока на ум приходит сервер tcp на Инди. Один из клиентов будет отправлять на сервер данные, а сервер по факту получения порции данных будет перебирать клиентов и если найдёт нужного, то будет писать в его сокет данные. На стороне клиента читать сокет с тайм-аутом 5 мс например, если что-то прочитается - обработать, если нет, делать паузу и читать дальше. Может есть более грамотная организация процесса? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2018, 22:30 |
|
||
|
Шлюз для работы с ВК
|
|||
|---|---|---|---|
|
#18+
maloletovСпасибо за советы. Я имел дело по только с Инди, остальные компоненты посмотрю. С самим АПИ ВК проблем нет, да он сделан поверх HTTPS. По сути основная проблема для меня вот в чем. Есть процесс, который живёт в отдельном потоке и в нем перманентно рождаются некоторые данные. И есть клиенты, которым эти данные нужно передать. Причём клиент должен получить свою часть данных или не получить ничего, если данных для него нет. Как грамотно организовать этот процесс? Пока на ум приходит сервер tcp на Инди. Один из клиентов будет отправлять на сервер данные, а сервер по факту получения порции данных будет перебирать клиентов и если найдёт нужного, то будет писать в его сокет данные. На стороне клиента читать сокет с тайм-аутом 5 мс например, если что-то прочитается - обработать, если нет, делать паузу и читать дальше. Может есть более грамотная организация процесса? В собственной кухне можно юзать DataSnap. Обмен на чистом TCP с помощью байтов, а не объектов, уже кажется каким-то далеким и нереальным... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2018, 22:37 |
|
||
|
Шлюз для работы с ВК
|
|||
|---|---|---|---|
|
#18+
maloletov...Есть процесс, который живёт в отдельном потоке и в нем перманентно рождаются некоторые данные. И есть клиенты, которым эти данные нужно передать. Причём клиент должен получить свою часть данных или не получить ничего, если данных для него нет... Клиенты и сервер - треды одного процесса? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2018, 22:48 |
|
||
|
Шлюз для работы с ВК
|
|||
|---|---|---|---|
|
#18+
Фэйтл Эра, Нет это разные приложения на разных машинах в сети. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2018, 22:50 |
|
||
|
Шлюз для работы с ВК
|
|||
|---|---|---|---|
|
#18+
maloletovФэйтл Эра, Нет это разные приложения на разных машинах в сети. Сеть - локальная (ограничена предприятием)? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2018, 22:53 |
|
||
|
Шлюз для работы с ВК
|
|||
|---|---|---|---|
|
#18+
Фэйтл ЭраmaloletovФэйтл Эра, Нет это разные приложения на разных машинах в сети. Сеть - локальная (ограничена предприятием)? Да, локалка ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2018, 22:56 |
|
||
|
Шлюз для работы с ВК
|
|||
|---|---|---|---|
|
#18+
Можно реализовать подписку . Сервер публикует все данные, которые у него появляются, а клиенты подписываются на те, которые им нужны. Преимущества: заранее неизвестно, что там клиентам может понадобится. Если сеть локальная - ZeroMQ: 16588333 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2018, 23:03 |
|
||
|
Шлюз для работы с ВК
|
|||
|---|---|---|---|
|
#18+
Фэйтл ЭраМожно реализовать подписку . Сервер публикует все данные, которые у него появляются, а клиенты подписываются на те, которые им нужны. Преимущества: заранее неизвестно, что там клиентам может понадобится. Если сеть локальная - ZeroMQ: 16588333 Спасибо, интересный вариант, покопаю в этом направлении ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2018, 23:18 |
|
||
|
Шлюз для работы с ВК
|
|||
|---|---|---|---|
|
#18+
https://www.clevercomponents.com/portal/kb/a111/vk-authorization-getting-the-oauth-code-in-delphi-app-using-twebbrowser.aspx хоть и не инди но на просторах инета можно найти и сделать по аналогии на инди я думаю ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2018, 00:44 |
|
||
|
Шлюз для работы с ВК
|
|||
|---|---|---|---|
|
#18+
maloletov... По сути основная проблема для меня вот в чем. Есть процесс, который живёт в отдельном потоке и в нем перманентно рождаются некоторые данные. И есть клиенты, которым эти данные нужно передать. Причём клиент должен получить свою часть данных или не получить ничего, если данных для него нет. Как грамотно организовать этот процесс? Пока на ум приходит сервер tcp на Инди. Один из клиентов будет отправлять на сервер данные, а сервер по факту получения порции данных будет перебирать клиентов и если найдёт нужного, то будет писать в его сокет данные. На стороне клиента читать сокет с тайм-аутом 5 мс например, если что-то прочитается - обработать, если нет, делать паузу и читать дальше. Может есть более грамотная организация процесса? Как X-Cite написал, можно использовать DataSnap, если есть такая возможность (он есть не во всех версиях, в Professopnal его нет, если это для вас имеет значение). Там есть обратные вызовы с сервера. Если для обмена клиентов и сервера использовать не Инди, а написать обмен на API, то чтение на клиенте можно организовать при помощи событий. Когда во входящий буфер сокета что-то пришло, срабатывает (взводится) событие и соответственно программа может обработать пришедшие данные. http://www.delphikingdom.ru/asp/viewitem.asp?catalogid=1060#06 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2018, 14:53 |
|
||
|
Шлюз для работы с ВК
|
|||
|---|---|---|---|
|
#18+
s62чтение на клиенте можно организовать при помощи событий. Когда во входящий буфер сокета что-то пришло, срабатывает (взводится) событие и соответственно программа может обработать пришедшие данные. Если программа оконная, то сообщения (message) удобнее событий (event). Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2018, 15:09 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39739853&tid=2040067]: |
0ms |
get settings: |
6ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
155ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
49ms |
get tp. blocked users: |
1ms |
| others: | 204ms |
| total: | 446ms |

| 0 / 0 |
