2010-09-07 136 views
4

我需要維護服務器和多個客戶端之間的連接,以便客戶端可以發送命令,並且服務器觸發事件​​。服務器基本上是一個音樂播放器,並且客戶端發送諸如「Play()」,「Pause()」,「GetPlaylists()」等命令。其一側的服務器需要能夠告訴客戶端諸如「SongEnded」或「PlayerPaused」。此外,它還需要能夠發送一些數據(如當前歌曲,專輯圖像,播放列表等)。我可以自己去創建一個套接字,並創建自己的協議來處理上述所有情況,但有可能有人已經在我之前完成了這個任務,所以我真正想要的是一個爲實時應用程序開發的框架, .NET服務器和客戶端之間的通信。例如,我看過xml-rpc,但不知道該如何處理「OnClientSend」。另外,如果我沒有弄錯,xml-rpc會變得像REST一樣。我也研究過wcf,但由於我沒有經驗,我不知道從哪裏開始,以及如何在簡單的控制檯應用程序中託管服務器。.NET雙向套接字實時通信協議l

重要提示:客戶端需要能夠不是.NET。
重要提示:這需要可以連接到java(android)。
重要提示:主要平臺是Windows(服務器和客戶端)和Android(客戶端)。
重要提示:沒有流式音頻。但是,圖像需要發送。

任何想法的解決方案,將不勝感激。另外,如果你有一個好的框架的鏈接,或者說明如何使用.NET中已經存在的組件,我會很開心。

[編輯] 的問題是,通過套接字發送數據時也不能保證(在所有!),您發送的包將被服務器在同一時間讀取。我可能會再發送50,然後是100,然後再發送50個字節,但服務器可能會將其讀爲200byte的塊,或者前100或100等,這意味着我需要創建一個緩衝區,讀取消息,直到我確定是問題),我收到了一條消息(沒有其他)。

回答

0

我最終創建了自己的簡單協議,我可以輕鬆地在多種語言中實現。我通過在套接字的兩邊添加一層額外的緩衝區,然後發送每條消息,然後發送一個字節序列,告訴另一方這是消息的結束,從而達到了期望的結果。此外,我添加了ID的消息,以啓用特殊的「$返回」消息。

消息是使用xmlserializer的簡單序列化類。類從xsd生成。

0

你也可以看看XMPPWebSockets。 XMPP不僅限於消息傳遞,您可以隨時爲自己的目的擴展它。因爲它是HTML5的一部分,所以WebSockets很好。

2

ZeroMQ看起來很適合您的問題。似乎你已經實現了類似的東西。

  • 充當併發框架的Supersocket庫。

  • 通過inproc,IPC,TCP和組播傳送消息。

  • 在扇出,pubsub,管道和請求 - 回覆模式中連接N對N.

  • 對於集羣產品和超級計算來說足夠快。

  • 用於可擴展多核消息傳遞應用程序的異步I/O。

  • 龐大而活躍的開源社區。

  • 20種語言,包括C,C++,Java,.NET,Python。

  • 大多數操作系統包括Linux,Windows,OS X.

  • LGPL免費軟件,通過iMatix公司的商業支持。

+0

是的,但我需要它在android上運行。 – Alxandr 2010-09-15 12:16:02