寻找一种通过互联网传输关键实时数据的好方法

时间:2012-10-22 06:09:32

标签: http sockets network-programming msmq rtp

我正在寻找一种通过互联网传输数据的好方法,我在C ++ / windows环境下工作。数据是二进制的,是提取图像的压缩blob。输入和要求如下:

  1. 6kB /包@ 10包/秒(每秒60kBytes)
  2. 可靠的数据传输
  3. 我是网络编程的新手,到目前为止,我可以发现下列方法之一是合适的。

    1. 套接字
    2. MSMQ(MS消息队列)
    3. 客户端在浏览器上运行(在浏览器上显示实时图像)。服务器运行本机C ++代码。如果有其他方法可以实现相同的目的,请告诉我?我应该选择哪一个?为什么?

3 个答案:

答案 0 :(得分:3)

如果服务器确定图像的发送速度(看起来像这样),服务器推送样式解决方案就有意义了。大多数浏览器(甚至非浏览器)目前正在解决的问题是 WebSockets

除了成为广泛采用的标准之外,WebSockets对大多数专有协议的主要优势在于它们运行在HTTP之上,因此可以渗透(大多数)代理和防火墙等。

在服务器端,您可以集成 node.js ,这可以让您轻松实现WebSockets,并附带许多其他库。它是用C ++编写的,可通过C ++和JavaScript进行扩展,node.js为其托管VM。 node.js的主要特性是在每个级别都是异步的,使这种编程风格成为默认。

但是当然还有其他方法可以在服务器端实现WebSockets,也许node.js比您需要的更多。我在Windows上为node.js实现了一个C ++扩展,并使用socket.io为旧浏览器执行WebSockets和非WebSocket传输,这对我来说很好。

但那是文本数据。在您的二进制数据的情况下,socket.io不会这样做,因此您可以查看通过WebSockets执行二进制文件的other libraries

答案 1 :(得分:2)

是否有任何特定原因导致您无法在Windows计算机上运行服务器? 60kb /秒,看起来像某种嵌入式设备?

根据我们的描述,您需要在浏览器上实时显示图像信息。您可以使用HTTP。但它的无国籍,意味着一旦信息被转移,你就会失去联系。您的客户端需要轮询C ++ / Windows计算机。如果您确信所生成的信息是定期的,则可以使用此方法。这需要一台服务器,所以只有对我的第一个问题是肯定的

聊天协议。类似于在客户端上运行的Jabber客户端,以及在C ++ / Windows机器上运行的Jabber服务器。聊天协议几乎可以实时

答案 2 :(得分:2)

虽然看起来似乎有道理,但在这种情况下我不会使用MSMQ。您现在可能不会遇到问题,但MSMQ消息的大小有限,因此您最终可能会遇到问题。

我会在这个应用程序中使用TCP,TCP在构建时考虑了可靠性,您可以通过套接字简单地提供数据。您可能必须自己弄清楚一个非常简单的协议,但它应该是最佳选择。

除非您使用的是开箱即​​用的理解MSMQ的嵌入式设备,否则使用MSMQ的最佳选择是使用代理,然后您仍然被迫使用TCP和可能的HTTP。

我在个人时间做家庭自动化,包括安全摄像头,我使用.net微框架,即使它确实有MSMQ功能,我仍然不会使用它。

我建议您查看MJPEG(Motion JPEG),它听起来与您想要的完全一样。

http://www.codeproject.com/Articles/371955/Motion-JPEG-Streaming-Server