2012-10-22 69 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