Ищете хороший метод для передачи критически важных данных в реальном времени через Интернет
Я ищу хороший метод для передачи данных через Интернет, и я работаю в среде C++/ Windows. Данные являются двоичными, сжатый объект извлеченного изображения. Входные данные и требования следующие:
- 6 КБ / пакет @ 10 пакетов / с (60 КБ / с)
- Надежная передача данных
Я новичок в сетевом программировании, и до сих пор я мог понять, что подойдет один из следующих методов.
- Розетки
- MSMQ (MS Message Queuing)
Клиент работает в браузере (показывает изображения в реальном времени в браузере). Пока на сервере работает родной код C++. Пожалуйста, дайте мне знать, если есть какие-либо другие методы для достижения того же? На какую мне пойти и почему?
3 ответа
Если сервер определяет скорость, с которой отправляются изображения (как это выглядит), имеет смысл использовать решение в стиле push-сообщений. То, что большинство браузеров (и даже не браузеров) решают в эти дни, являются WebSockets.
Основное преимущество WebSockets по сравнению с большинством проприетарных протоколов, помимо того, что они стали широко распространенным стандартом, заключается в том, что они работают поверх HTTP и, таким образом, могут проникать (в большинстве случаев) через прокси-серверы, межсетевые экраны и т. Д.
На стороне сервера вы можете интегрировать node.js, который позволяет легко реализовывать WebSockets и поставляется с множеством других библиотек. Он написан на C++ и расширяется с помощью C++ и JavaScript, для которого node.js содержит виртуальную машину. Главная особенность node.js - это асинхронность на каждом уровне, что делает этот стиль программирования по умолчанию.
Но, конечно, есть и другие способы реализации WebSockets на стороне сервера, возможно, node.js - это больше, чем вам нужно. Я реализовал расширение C++ для node.js в Windows и использую http://socket.io/ для переноса WebSockets и не-WebSocket для старых браузеров, и для меня это хорошо работает.
Но это были текстовые данные. В вашем случае двоичных данных socket.io не будет этого делать, так что вы можете проверить другие библиотеки, которые выполняют двоичные файлы через WebSockets.
Хотя может показаться, что это имеет смысл, я бы не использовал MSMQ в этом сценарии. Вы можете не столкнуться с проблемой сейчас, но сообщения MSMQ имеют ограниченный размер, и вы можете в конечном итоге попасть в стену из-за этого.
Я бы использовал TCP для этого приложения, TCP построен с учетом надежности, и вы можете просто передавать данные через сокет. Возможно, вам придется самостоятельно разработать очень простой протокол, но он должен быть лучшим выбором.
Если вы не используете встроенное устройство, которое понимает MSMQ "из коробки", лучшим вариантом для использования MSMQ будет использование прокси-сервера, и вы все равно будете вынуждены играть с TCP и, возможно, HTTP.
Я занимаюсь домашней автоматизацией, которая включает в себя камеры наблюдения в свое личное время, и я использую.net micro Framework, и даже если бы у него были возможности MSMQ, я бы по-прежнему не использовал его.
Я рекомендую вам взглянуть на MJPEG (Motion JPEG), который звучит именно так, как вы хотели бы сделать.
http://www.codeproject.com/Articles/371955/Motion-JPEG-Streaming-Server
Есть ли какая-то конкретная причина, по которой вы не можете запустить сервер на своей машине с Windows? 60кб / с, похоже на какое-то встроенное устройство?
Основываясь на нашем описании, вы должны показывать информацию об изображении в реальном времени в браузере. Вы можете использовать HTTP. но он не имеет состояния, то есть после передачи информации вы теряете соединение. Ваш клиент должен опросить компьютер C++/Windows. Если вы уверены, что полученная информация является периодической, вы можете использовать этот подход. Это требует сервера, так что только если да на мой первый вопрос
Протокол чата. Что-то вроде клиента Jabber, работающего на вашем клиенте, и сервера Jabber на вашем компьютере с C++/Windows. Протоколы чата позволяют практически в реальном времени