Добрый день.
Может быть кто-то подтолкнет к идее, или сталкивался с подобной задачей.
Есть поток данных поступающих по TCP, каждые 3,5 секунды и эти данные необходимо выводить на сайт в реалтайме. Подскажите пожалуйста, как лучше эти данные получать, как логичнее обрабатывать, какие механизмы использовать, какую лучше придумать архитектуру. Хранения данных не требуется.
Извините, если вопрос слишком общего характера.
Большое спасибо вам за ответы.
Сейчас прошел к такой дилемме:
- можно написать системный сервис, который слушает порт и хранит информацию(хоть в ОП), но не понятно как к этой информации получить доступ из веб-приложения.
- или написать wcf, из которого получить данные нет проблем, но вешать на него постоянный процесс прослушки порта по-моему не правильно, как я понимаю WCF должен работать от запроса к запросу.
Как вариант, написать системный сервис, который будет читать этот поток и хранить данные у себя в ОП. При обращении к веб-странице, достаём данные из сервиса с помощью любого доступного механизма межпроцессного взаимодействия, например, shared memory.
>> shared memory
Нет, серьезно? Какой в этом смысл? Веб-страница может обращаться к web api сервису, который будет пинать внешний TcpListnerService, отдающий всегда актуальную информацию. На странице это сделать хоть по таймеру, а дальше заморачиваться нет смысла. Как будут взаимодействовать TcpListnerService и ApiController уже другое дело - если они в одном домене приложения, то можно обращаться напрямую, если в разных, то через какой-нибудь wcf. Но... но... shared memory....
WCF как раз и использует shared memory для межпроцессного взаимодействия, если не ошибаюсь. Я же не говорил, что необходимо напрямую работать с WinAPI-функциями. Можно использовать WCF, можно System.IO.MemoryMappedFiles, тут уж решать автору вопроса. Ну и да, сокеты тоже вариант, но, имхо, избыточный.
Написать сервис или виндовс приложение и запускать его из под администратора.
Приложение или пишет данные в лог, а сайт читает, или приложение открывает определенную страницу и как параметр передает туда ваши данные. Если объем данных не большой, предпочтительнее 2 вариант. В таком случае Action который срабатывает при открытии страницы считываем этот параметр и обновляем данные на клиенте.
Обновление данных на клиенте делать через SignalR или клиент делает запрос каждые 3.5 сек и обновляет через ajax