1.
SvetlanaSchipakina
26.02.20 12:39 Сейчас в теме
Есть документация SDK для синхронизации с ПО Макроскоп распознавание номеров. мне нужно получать события распознавания онлайн. События можно получать в JSON-формате в «бесконечном» HTTP-соединении. Для этого
необходимо выполнить следующий запрос:
http://127.0.0.1:8080/event?login=root&password=&responsetype=json При попытке сделать такой запрос из 1С - 1С зависает, т.к. считает, что результатом должен быть скачанный файл, пытается его скачать, но никогда не скачает.
Так же себя ведет и браузер Explorer
При запуске из браузера Chrome получаю бесконечный ответ в текстовом виде:
Вероятно мне нужен промежуточный инструмент, который будет обрабатывать этот поток данных, отсекая пустые события keepAlive, а в 1С методом Get запроса, например, отправлять распознанный номер.
Кто-то сталкивался с подобным вопросом? Есть идеи как это можно реализовать?
В итоге мне все это нужно, чтобы отображать на табло текущий распознанный номер. Можно и без 1С все решить, напрямую отправлять POST запрос в табло с номером автомобиля.
пробовала через powershell, но он обрабатывает подобный запрос путем скачивания файла потока.
Можете на питончике сделать вечный цикл, внутри request.session, дальше проверка на соединение и получение данных. Если соединение свалилось (а обычно разные промежуточные сервера могут сбрасывать соединение через 30 сек, например - прокси там всякие) - снова его поднимать.
А можно, полагаю, и как-то так:
import requests
import json
r = requests.get('http://ххххххх.уууу/оооо.json',
stream=True)
for line in r.iter_lines():
if line: # filter out keep-alive new lines
...
(1) так вы можете поставить в 1с чтобы результатом была строка... а насчет бесконечного соединения - интересно посмотреть ссылку на СДК если оно открытое, что имеется ввиду под бесконечным хттп соединением, никогда в своей жизни такого не встречал, любой запрос всегда конечен.. или там схема передатчик передает, а считыватель что успел то считал)
(3) имеется в виду TCP-соединение, которое не разрывается и остается открытым. Это помогает экономить ресурсы если с одним и тем же хостом нужно постоянно обменитьвася данными по http.
(9) а что ж вы сдк не сначала читаете)
в самом начале написано, что в качестве среды разработки предполагается использование
Microsoft Visual Studio.
сдк предлагает писать плагины как наследники класса
именно в эти наследники и пойдет информация с http соединения, вероятно это и есть тот промежуточный инструмент который вам нужен
а так что касается "бесконечного" http 1с как тут писали не разрывает соединение если таймаут = 0 при его создании, но это не то что вам нужно, разбить поток данных на отдельные json 1с не сможет, 1с читает пока идет информация
1с с http так как написано в сдк работать не сможет, он работает как браузер - принимает все что в него лезет, не сможет анализировать на транспортном уровне данные между заголовками http
Напрямую работать с открытыми http-соединениями в 1С нельзя. Встроенных средств работы с сетевыми потоками нет. Вам нужно постоянно делать запрос на получение новой порции данных. И обязательно ставьте таймаут, без него столкнетесь с зависанием при ожидании ответа.
Если есть в SDK возможность получать данные НЕ в реальном времени (например, получать данные за какой-то промежуток времени) - лучше использовать ее. т.е. не ждать пока ПО пришлет новые данные, а каждую минуту отправлять запрос "дай мне данные за прошедшую минуту".
Поддерживает ли SDK Макроскопа веб-сокеты? Если да - возьмите компоненту работы с веб-сокетами в 1С и интегрируйтесь через нее
В крайнем случае, если ничего не поможет, сделайте прокси веб-сервис-обертку на том языке, который поддерживает работу с открытым соединением, орашивайте его на предмет новых данных с какой-то периодичностью.
Напрямую работать с открытыми http-соединениями в 1С нельзя
Что Вы имеете в виду? Соединение в 1С можно открыть один раз и делать через него несколько запросов. Соединение по умолчанию создается как keep-alive в HTTP 1.1, и эска умеет его держать в объекте ХТТПСоединение = Новый HTTPСоединение(..). Другое дело, когда в ответе сервера нет признака, что ответ законченный.
(6) да, действительно сформулировал я неудачно. То что 1С держит соединение открытым - внутренняя особенность, оптимизация объекта HTTPСоединение, управлять этим во встроенном языке мы не можем. Но это не то что нужно спрашивающему.
Я имел в виду, что используя HTTPСоединение нельзя открыть соединение и прослушивать его как поток, в режиме реального времени, ожидая новую порцию данных. Именно это требуется топикстартеру
10.
SvetlanaSchipakina
27.02.20 10:18 Сейчас в теме
(5) работать не в реальном времени нет смысла, мне нужно отобразить номер автомобиля который подъехал и вспомогательную информацию по его лицевому счету, если требуется (например сообщить, что у него задолженность по оплате)
Макроскоп других вариантов не предоставляет
(10) в реальном времени получать данные в платформе, открыв соединение и постоянно получая из него данные, к сожалению, невозможно.
Либо вы часто делаете запросы в цикле на стороне 1С, либо сторонняя программа присылает в 1С данные (через веб-сервисы, Odata и т.п.)
В крайнем случае, если ничего не поможет, сделайте прокси веб-сервис-обертку на том языке, который поддерживает работу с открытым соединением, орашивайте его на предмет новых данных с какой-то периодичностью.
пока я прорабатываю версию php + curl
curl умеет прослушивать поток, php может его обработать, отсекая пустые данные и отправлять get запрос в 1С, передавая номер авто и номер точки прохода.
Нашла сообщения на форумах, что это должно работать. Сегодня буду тестировать.
а какова должна быть частота опроса Макроскопа? и каков событийный механизм должен быть в 1С?
регламентное задание с интервало в n секунд или обработчик ожидания? с сервера запрос или с клиента?
Если с клиента, то можно ВК написать и вызывать внешнее событие
Если с сервера, то все равно придется прокладку писать и хттп сервис поднимать...
16.
SvetlanaSchipakina
27.02.20 14:23 Сейчас в теме
(15) у меня http сервис для этого есть. планирую, при появлении машины на него отправляется GET запрос с номером авто и точкой прохода.
мне нужно, чтобы какая-то программа/сервис слушал это бесконечное соединение от макроскоп и создавал GET запрос на мой HTTP сервис при появлении машины.
Можете на питончике сделать вечный цикл, внутри request.session, дальше проверка на соединение и получение данных. Если соединение свалилось (а обычно разные промежуточные сервера могут сбрасывать соединение через 30 сек, например - прокси там всякие) - снова его поднимать.
А можно, полагаю, и как-то так:
import requests
import json
r = requests.get('http://ххххххх.уууу/оооо.json',
stream=True)
for line in r.iter_lines():
if line: # filter out keep-alive new lines
...