2012-10-22 32 views
4

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

  1. 6KB /包@ 10个分组/秒(每秒60kBytes)
  2. 可靠的数据传输

我相信新的网络编程和到目前为止我可以计算出于以下方法之一将是适合的。

  1. 套接字
  2. MSMQ(MS消息队列)

在客户机上浏览器中运行(在浏览器显示的实时图像)。服务器运行本机C++代码。请让我知道是否有其他方法可以达到相同的效果?我应该选择哪一个,为什么?

回答

3

如果服务器决定图像发送,这是个什么样子,一个服务器推送风格的解决方案将是有意义的步伐。现在大多数浏览器(甚至是非浏览器)都在为这些日子安排的是WebSockets

主要优点的WebSockets具有优于多数专有协议,除了成为广泛采用的标准是它们在HTTP之上运行,并且因此能够渗透(大多数)代理和防火墙等

在服务器端,您可能会整合node.js,它允许您轻松实现WebSockets,并附带很多其他库。它是用C++编写的,并且可以通过C++和JavaScript进行扩展,node.js为其提供了一个虚拟机。 node.js的主要特点是在每个级别都是异步的,使得这种编程风格成为默认设置。

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

但这是文本数据。在你的二进制数据的情况下,socket.io不会这样做,所以你可以检查出other libraries在WebSockets上执行二进制。

+0

这看起来就像我在寻找的东西,非常感谢您提供有关WebSockets的建议。我想我应该去用它。 –

+0

是的,经过一番研究,我决定以node.js为最佳方式。 –

2

是否有任何特定的原因,你为什么不能在你的Windows机器上运行服务器? 60kb /秒,看起来像某种嵌入式设备?

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

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

+1

非常感谢您的回复。是的,我可以运行C++/Windows服务器。这不是问题,是的,这是正确的,客户端是嵌入式机器。生成的信息是周期性的,但我不应该错过任何数据包,因为我使用差分编码。我会对Jabber做一些研究。 –

2

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

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

除非您使用了解MSMQ开箱即用的嵌入式设备,否则使用MSMQ的最佳方法是使用代理,然后您仍然不得不使用TCP和可能的HTTP进行播放。

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

我建议你看看MJPEG(Motion JPEG),它听起来就像你想做的一样。

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